spring的扩展接口
spring提供了一些扩展接口来对spring进行定制化功能,可以选择如下一些扩展点:
BeanFactoryPostProcessor
beanFactory后置处理器,存在于容器启动阶段,支持在bean factory标准初始化完成后,对bean factory进行一些额外处理。这时所有的BeanDefinition已经加载完毕,但是还没有进行bean初始化。此时可以对bean的定义元信息(BeanDefinition)进行修改,但是不能对bean的实例进行修改,如PropertyPlaceholderConfigurer,就是在这个扩展点上对bean属性中的占位符进行替换
1 | public interface BeanFactoryPostProcessor { |
BeanDefinitionRegistryPostProcessor
它扩展自BeanFactoryPostProcessor,在执行BeanFactoryPostProcessor的功能前,提供了可以添加bean definition的能力,允许在初始化一般bean前,注册额外的bean。例如可以在这里根据bean的scope创建一个新的代理bean
1 | public class TestBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor { |
BeanPostProcessor
提供了在bean初始化之前和之后插入自定义逻辑的能力。与BeanFactoryPostProcessor的区别是处理的对象不同,BeanFactoryPostProcessor是对beanfactory进行处理,BeanPostProcessor是对bean的实例进行处理,存在于bean对象实例化阶段。如BeanNameAutoProxyCreator来为对象生成相应的代理对象
注:上面这三个扩展点,可以通过实现Ordered和PriorityOrdered接口来指定执行顺序。实现PriorityOrdered接口的processor会先于实现Ordered接口的执行。
1 | public interface BeanPostProcessor { |
InstantiationAwareBeanPostProcessor
继承自BeanPostProcessor,在其基础上增加了三个方法,把可扩展的范围增加了实例化阶段和属性注入阶段
1 | public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor { |
Aware接口
Aware接口的目的是为了让Bean获得Spring容器中的服务
BeanFactoryAware
如果对象实例实现了BeanFactoryAware接口,BeanFactory容器会将自身通过调用setBeanFactory方法传递给该对象实例,使得该对象实例拥有了BeanFactory的实例引用,用于获取当前BeanFactory
1 | public interface BeanFactoryAware extends Aware { |
ApplicationContextAware
可以获得ApplicationContext及其中的bean,当需要在代码中动态获取bean时,可以通过实现这个接口来实现,用于获取ApplicationContext
1 | public interface ApplicationContextAware extends Aware { |
BeanNameAware
如果spring容器检测到当前对象实现了BeanNameAware接口,会将该对象实例的bean定义对应的beanName调用setBeanName方法传递给当前对象实例,用于获取容器中bean的名称
1 | public interface BeanNameAware extends Aware { |
BeanClassLoaderAware
获取类加载器
1 | public interface BeanClassLoaderAware extends Aware { |
MessageSourceAware
用于获取MessageSource
1 | public interface MessageSourceAware extends Aware { |
EnvironmentAware
获取环境变量
1 | public interface EnvironmentAware extends Aware { |
EmbeddedValueResolverAware
获取spring容器加载的properties文件属性值
1 | public interface EmbeddedValueResolverAware extends Aware { |
ApplicationEventPublisherAware
应用事件发布器,可以发布事件
1 | public interface ApplicationEventPublisherAware extends Aware { |
ResourceLoaderAware
获得资源加载器,可以获得外部资源文件
1 | public interface ResourceLoaderAware extends Aware { |
InitializingBean
可以在bean初始化完成,所有属性设置完成后执行特定逻辑,例如对自动装配对属性进行验证等等
1 | public interface InitializingBean { |
DisposableBean
用于在bean被销毁前执行特定的逻辑,例如做一些回收工作等
1 | public interface DisposableBean { |
ApplicationListener
用来监听spring的标准应用事件或者自定义事件
1 | public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { |