在弄的练手的Rpc项目想要实现加上注释后自动注册和代理,最容易想到的就是Spring的DI和Bean注册,故在此再次学习下Spring Ioc
1.Spring容器
先来看基本容器接口BeanFactory,它提供了作为Ioc容器的基本配置和基本功能的约束.
而我们常见的ApplicationContext则是BeanFactory的子类,在基础上提供了更多的功能
在下文中所说的Ioc容器为ApplicationContext,因为ApplicationContext包含了BeanFactory的所有功能,所以一般都是使用ApplicationContext.
而我们要实例化一个Ioc容器也只需调用其实现类的构造函数即可
2.Bean
我们要将类放在Ioc容器中,让Ioc去管理控制的就是形式Bean了 ,而要将Bean放在容器中,需要一个类去描述其各种属性,这就是BeanDefinition了(不用Class是因为还有其他属性需要描述)
一个Bean的生命周期主要有如下的四个主要片段 实例化---属性赋值---初始化---销毁
而Spring也为我们在这几个周期上提供了扩展点
3.容器扩展点
Spring为Ioc容器的扩展提供了接口 按个人理解觉得可以分为Aware类和PostProcessor分别对应属性赋值和初始化阶段
Aware为意识的意思,单纯的bean是没有意识的(不知道自己所处的Spring容器?),而实现了Aware系列的接口的bean就可以访问到Spring容器并得到所想感知的值,(然后就可以赋值了,所以就是在属性赋值阶段?).(但这会加大与容器的绑定,增强了与Spring的耦合)。所以就可以通过实现ApplicationContextAware访问到ApplicationContext容器.
再来看初始化阶段
PostProcessor是后置处理器的意思.此处主要有几个常见接口 BeanPostProcessor和BeanFactoryPostProcessor
可以看出分别是对Bean和Ioc容器进行操作
BeanPostProcessor的主要作用让我们就是在Bean初始化前后进行一定操作
BeanFactoryPostProcessor的作用则是让我们能够操作BeanDefinition
补充 FactoryBean 它是一个Bean 通过它可以实现返回Bean实例的逻辑(自定义实例化!)