Spring Ioc学习笔记之常见概念

91 阅读2分钟

在弄的练手的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实例的逻辑(自定义实例化!)