IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Bean Factory 和 ApplicationContext 谁才是 Spring IOC 容器-10 -> 正文阅读

[Java知识库]Bean Factory 和 ApplicationContext 谁才是 Spring IOC 容器-10

Spring IOC 容器

  • Bean Factory 和 ApplicationContext 谁才是 Spring IOC 容器?

    package org.xiaoge.thinking.in.spring.ioc.overview.dependency.injection;
    
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.ListableBeanFactory;
    import org.springframework.beans.factory.ObjectFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ConfigurableApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.core.env.Environment;
    import org.xiaoge.thinking.in.spring.ioc.overview.annotation.Super;
    import org.xiaoge.thinking.in.spring.ioc.overview.domain.User;
    import org.xiaoge.thinking.in.spring.ioc.overview.repository.UserRepository;
    
    import java.util.Map;
    
    /**
     * 注意: 依赖注入/依赖查找 它们的来源并不是一个
     * 依赖注入示例 看 UserRepository
     *  1. 名称集合注入: util:list
     *  2. 类型集合注入: autowire
     *  3. 注入内部bean: users
     *  4. 注入非内建bean: BeanFactory
     *  5. 延迟注入: ObjectFactory
     *
     * @Classname DependencyInjectionDemo
     * @Date 2022/10/17 14:56
     * @Created by ZhangXiao
     * @Description TODO
     */
    public class DependencyInjectionDemo {
    
        public static void main(String[] args) {
            // 配置xml配置文件
            // 启动spring应用上下文
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:META-INF/dependency-injection-context.xml");
    
            // 依赖来源一: 自定义Bean
            UserRepository userRepository = applicationContext.getBean("userRepository", UserRepository.class);
    
            // 依赖来源二: 容器内建依赖
            System.out.println(userRepository.getBeanFactory());
    
            // 依赖来源三: 容器内建Bean
            Environment environment = applicationContext.getBean(Environment.class);
            System.out.println("获取 Environment 类型的 Bean: " + environment);
    
            whoIsIoCContainer(applicationContext, userRepository);
    
        }
    
        /**
         * ApplicationContext/BeanFactory 谁才是Ioc容器
         *
         * 1. BeanFactory这个接口提供了一些高级配置的机制, 能够来管理这些对象
         * 2. ApplicationContext是BeanFactory的一个子接口
         *      特性:
         *          1. 简化了和spring aop的整合
         *          2. 消息资源的一个处理(国际化支持)
         *          3. 事件的发布
         *          4. 应用级别的一些上下文比如说WebApplication在web使用场景上面
         *      总而言之BeanFactory是提供一个配置的框架, 并且是一个基本功能, 所以BeanFactory是一个基本容器 而 ApplicationContext 是它的一个超集
         *
         * @param applicationContext
         * @param userRepository
         */
        public static void whoIsIoCContainer(ApplicationContext applicationContext, UserRepository userRepository) {
    
            // ConfigurableApplicationContext <- ApplicationContext <- BeanFactory
    
            // 这个表达式为什么会不成立
            System.out.println(userRepository.getBeanFactory() == applicationContext);
    
            // ApplicationContext 就是 BeanFactory
        }
    
    }
    
    
    
    /*
    	运行结果								                                       org.springframework.beans.factory.support.DefaultListableBeanFactory@22f71333: defining beans [user,objectFactory,superUser,userRepository]; root of factory hierarchy
    
    	获取 Environment 类型的 Bean: StandardEnvironment {activeProfiles=[], defaultProfiles=[default], propertySources=[PropertiesPropertySource {name='systemProperties'}, SystemEnvironmentPropertySource {name='systemEnvironment'}]}
    
    	false
    */
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SX74COlE-1667361419483)(C:\Users\13301\AppData\Roaming\Typora\typora-user-images\image-20221102112749409.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lr4rNBzJ-1667361419484)(C:\Users\13301\AppData\Roaming\Typora\typora-user-images\image-20221102112819003.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jq8yaQwy-1667361419484)(C:\Users\13301\AppData\Roaming\Typora\typora-user-images\image-20221102113021845.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h64Ep7J7-1667361419485)(C:\Users\13301\AppData\Roaming\Typora\typora-user-images\image-20221102113039495.png)]

  • 相当于是代理对象getBean, 我们可以看出DefaultListableBeanFactory是一个组合对象

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:12:25  更:2022-11-05 00:14:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/19 4:03:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码