intellij idea安装 mysql视频 LVS 设计模式 java反射机制 postgresql rest stack angular material vue传值 tomcat调优和jvm调优 wordpress本地建站 plsql连接mysql数据库 phpstorm插件 docker保存镜像 python调用函数 python零基础教程 python读取本地文件 怎么配置java环境 java中数据类型 java连接mysql数据库 java数组添加值 java定义接口 java数组最大值 java如何编写接口 java集合框架图 java流程 java抛出自定义异常 java语言入门 java日期格式 linux的find php案例 魔兽世界字体包 微信超级好友 html特殊字符 华为线刷工具 脚本大全 编程语言实现模式 iframe跨域 视频编辑专家下载
当前位置: 首页 > 学习教程  > 编程语言

BeanFactory与ApplicationContext的区别

2020/10/8 20:28:01 文章标签:

BeanFactory是Spring底层IOC容器; ApplicationContext是具备应用特性的BeanFactory超集; public class DependencyInjectionDemo {public static void main(String[] args) {// 配置 XML 配置文件// 启动 Spring 应用上下文 // BeanFactory beanFactory new ClassPat…

BeanFactory是Spring底层IOC容器;

ApplicationContext是具备应用特性的BeanFactory超集;

public class DependencyInjectionDemo {

    public static void main(String[] args) {
        // 配置 XML 配置文件
        // 启动 Spring 应用上下文
//        BeanFactory beanFactory = new ClassPathXmlApplicationContext
//        ("classpath:META-INF/dependency-injection-context.xml");

        ApplicationContext applicationContext
                = new ClassPathXmlApplicationContext("classpath:META-INF/dependency-injection-context.xml");

        // 依赖来源一:自定义 Bean
        UserRepository userRepository = applicationContext
                .getBean("userRepository", UserRepository.class);
//        System.out.println(userRepository.getUsers());

        whoIsIocContainer(userRepository, applicationContext);

        // 依赖来源二:依赖注入(内建依赖)-> DefaultListableBeanFactory
        System.out.println(userRepository.getBeanFactory());

        ObjectFactory<ApplicationContext> userObjectFactory = userRepository.getObjectFactory();
        // ApplicationContext
        System.out.println(userObjectFactory.getObject());
        // true
        System.out.println("内建 Bean 对象:" + (userObjectFactory.getObject() == applicationContext));

        // 依赖查找 (错误)
//        System.out.println(applicationContext
//        .getBean(BeanFactory.class));

        // 依赖来源三:容器内建 Bean
        Environment environment = applicationContext.getBean(Environment.class);
        System.out.println("获取 Environment 类型的 Bean:" + environment);

    }

    private static void whoIsIocContainer(UserRepository userRepository,
                                          ApplicationContext applicationContext) {

        // ConfigurableApplicationContext <- ApplicationContext <- BeanFactory

        // ConfigurableApplicationContext#getBeanFactory()

        // 这个表达式为什么会不成立
        // 因为 AbstractRefreshableApplicationContext创建了DefaultListableBeanFactory,他们俩个并不是一个对象
        // false
        System.out.println("内建非 Bean 对象(依赖): " + (userRepository.getBeanFactory() == applicationContext));

        // ApplicationContext is BeanFactory

    }

}

执行结果:

内建非 Bean 对象(依赖): false
org.springframework.beans.factory.support.DefaultListableBeanFactory@124c278f: defining beans [user,superUser,objectFactory,userRepository]; root of factory hierarchy
org.springframework.context.support.ClassPathXmlApplicationContext@6fb554cc, started on Thu Oct 08 17:01:25 CST 2020
内建 Bean 对象:true
获取 Environment 类型的 Bean:StandardEnvironment {activeProfiles=[], defaultProfiles=[default], propertySources=[PropertiesPropertySource {name='systemProperties'}, SystemEnvironmentPropertySource {name='systemEnvironment'}]}

 


本文链接: http://www.dtmao.cc/news_show_250315.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?