spring源码概述

(15) Aware接口的作用

       ① aware接口的注释信息:

        一个标记superinterface,指示bean有资格通过回调样式的方法被Spring容器通知特定的框架对象

        通过回调方法,可以获得当前容器里所有组件对象。

        ② 当获取到当前对象的时候,已获取了当前容器的所有对象

        ③ 获取容器创建时使用的名字: A implements BeanNameAware 

                applicationContext.get~ 方法也可获取其他信息

        ④ 填充属性

        AbstractAutowireCapableBeanFactory类中 ---> initializeBean() 方法 --> invokeAwareMethods() 判断bean是否实现各种Aware接口,给bean set响应值

        ⑤ 当spring容器创建的bean对象在进行具体操作的时候,如果需要容器的其他对象,此时可将对象实现Aware接口,来满足当前需求。

        很少用Aware接口,若二次开发,则使用Aware

(16) springbean

        springBean分为普通对象和容器对象 ,普通对象是我们自定义的对象;容器对象是内置对象(源码中new的对象),Spring需要的对象。

AbstractApplicationContext.java  --> invokeBeanFactoryPostProcessors()方法上的注解

 invoke [ɪnˈvəʊk] 调用

(17) 观察者模式

        初始化的顺序为什么是这样的? BeanFactory接口定义时,已经定义好了:

        (beanFactory接口中的注释)

         在不同的阶段要处理不同的工作,怎么办?----

                观察者模式:监听器、监听事件、多播器(广播器)

        比如:AbstractApplicationContext.java中refresh()方法中:

                initApplicationEventMulticaster();  init初始化;Application应用;event事件;

                        初始化应用程序事件多播器

                registerListeners()  注册监听器

(18) 接口

        ①Environment   实现类-StandardEnvironment: System.getEnv(); System.getProperties()

           standard  [ˈstændəd]标准

           自动注入(@Autowired)的Map,注入的一些环境的属性值是 System.getEnv() 和System.getProperties() 设置进去的。

    启动类中 --- ClassPathXmlApplicationCoontext 构造函数-- 点击this方法-- setConfigLoations() --- resolvePath()---- getEnvironment() 获取当前环境的变量

        在容器还未启动时,就已经准备环境对象了

        abstractApplicationContext类中有environment(ConfigurableEnvironment)变量,可以直接获取

  mutable [ˈmjuːtəbl] 可变的     resolve  [rɪˈzɒlv]决定

        ② BeanFactory   Aware   BeanDefinition(BeanDefinitionRegistry 对beanDefinition的增删改查操作)     BeanDefinitionReader   BeanFactoryPostProcessor   BeanPostProcessor    Environment  FactoryBean

        registry  [ˈredʒɪstri] 登记处

        ③ 面试题:BeanFactory和FactoryBean的区别

                都是用来创建对象。当使用BeanFactory的时候必须遵循完整的创建过程,这个过程由spring来管理控制。     FactoryBean只需要调用getObgect就可以返回具体的对象,整个对象的创建过程是由用户自己来控制的,更加灵活,不需要遵循bean的生命周期

                FactoryBean中有三个方法:isSingleton getObgect getObgectType

       

         <bean id="aFactoryBean" class="....">

        A aFactoryBean = (A)context.getBean("aFactoryBean");    -- 返回对象是A

        context.getBean("&aFactoryBean") -- 返回对象是aFactoryBean

         getobject是源码中默认调用的。

        FactoryBeanRegistrySupport类中--- object = factory.getObject()

        support   [səˈpɔːt] 支持

        当IOC框架完成整个容器创建好后,即bean都创建完成后(new ClassPathXmlApplicationContext 完成以后),有没有A对象? --- 没有

        context.getBean("aFactoryBean") 执行时,一级缓存中没有A对象,后面代码才执行object = factory.getObject()代码,得到A对象。

                

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值