spring的扩展接口

第一章 spring框架构成
第二章 spring容器
第三章 spring配置bean
第四章 bean的继承和依赖
第五章 bean的生命周期
第六章 spring依赖注入
第七章 Spring AOP
第八章 spring事务
第九章 spring事件监听
第十章 web应用使用spring
第十一章 spring注解整理
第十二章 spring事务失效场景
第十三章 spring bean的作用域
第十四章 spring的扩展接口



spring的扩展接口

spring提供了一些扩展接口来对spring进行定制化功能,可以选择如下一些扩展点:

BeanFactoryPostProcessor

beanFactory后置处理器,**存在于容器启动阶段,**支持在bean factory标准初始化完成后,对bean factory进行一些额外处理。这时所有的bean的描述信息已经加载完毕,但是还没有进行bean初始化。如PropertyPlaceholderConfigurer,就是在这个扩展点上对bean属性中的占位符进行替换

public interface BeanFactoryPostProcessor {

   
   void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

}
BeanDefinitionRegistryPostProcessor

它扩展自BeanFactoryPostProcessor,在执行BeanFactoryPostProcessor的功能前,提供了可以添加bean definition的能力,允许在初始化一般bean前,注册额外的bean。例如可以在这里根据bean的scope创建一个新的代理bean

BeanPostProcessor

提供了在bean初始化之前和之后插入自定义逻辑的能力。与BeanFactoryPostProcessor的区别是处理的对象不同,BeanFactoryPostProcessor是对beanfactory进行处理,BeanPostProcessor是对bean进行处理,存在于bean对象实例化阶段。如BeanNameAutoProxyCreator来为对象生成相应的代理对象

注:上面这三个扩展点,可以通过实现Ordered和PriorityOrdered接口来指定执行顺序。实现PriorityOrdered接口的processor会先于实现Ordered接口的执行。

public interface BeanPostProcessor {

   
   Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;

   
   Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;

}

Aware接口

Aware接口的目的是为了让Bean获得Spring容器中的服务

BeanFactoryAware

如果对象实例实现了BeanFactoryAware接口,BeanFactory容器会将自身通过调用setBeanFactory方法传递给该对象实例,使得该对象实例拥有了BeanFactory的实例引用,用于获取当前BeanFactory

public interface BeanFactoryAware extends Aware {

   void setBeanFactory(BeanFactory beanFactory) throws BeansException;

}
ApplicationContextAware

可以获得ApplicationContext及其中的bean,当需要在代码中动态获取bean时,可以通过实现这个接口来实现,用于获取ApplicationContext

public interface ApplicationContextAware extends Aware {

   
   void setApplicationContext(ApplicationContext applicationContext) throws BeansException;

}
BeanNameAware

如果spring容器检测到当前对象实现了BeanNameAware接口,会将该对象实例的bean定义对应的beanName调用setBeanName方法传递给当前对象实例,用于获取容器中bean的名称

public interface BeanNameAware extends Aware {
   void setBeanName(String name);

}
BeanClassLoaderAware

获取类加载器

public interface BeanClassLoaderAware extends Aware {

   void setBeanClassLoader(ClassLoader classLoader);

}
MessageSourceAware

用于获取MessageSource

public interface MessageSourceAware extends Aware {

  
   void setMessageSource(MessageSource messageSource);

}
EnvironmentAware

获取环境变量

public interface EnvironmentAware extends Aware {

   
   void setEnvironment(Environment environment);

}
EmbeddedValueResolverAware

获取spring容器加载的properties文件属性值

public interface EmbeddedValueResolverAware extends Aware {

  
   void setEmbeddedValueResolver(StringValueResolver resolver);

}
ApplicationEventPublisherAware

应用事件发布器,可以发布事件

public interface ApplicationEventPublisherAware extends Aware {

   
   void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher);

}
ResourceLoaderAware

获得资源加载器,可以获得外部资源文件

public interface ResourceLoaderAware extends Aware {

   
   void setResourceLoader(ResourceLoader resourceLoader);

}

InitializingBean

可以在bean初始化完成,所有属性设置完成后执行特定逻辑,例如对自动装配对属性进行验证等等

public interface InitializingBean {

   void afterPropertiesSet() throws Exception;

}

DisposableBean

用于在bean被销毁前执行特定的逻辑,例如做一些回收工作等

public interface DisposableBean {

   void destroy() throws Exception;

}

ApplicationListener

用来监听spring的标准应用事件或者自定义事件

public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
   void onApplicationEvent(E event);

}

参考文献

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾光师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值