Spring来一发(六)Spring的钩子方法和钩子接口
1、Aware接口族Spring中提供了各种Aware接口,方便从上下文中获取当前的运行环境,常见的包括:BeanFactoryAware,BeanNameAware,ApplicationContextAware,EnvironmentAware,BeanClassLoaderAware等。BeanFactoryAware接口:通过它可以拿到Spring容器中的Bean。通过调用getB...
1、Aware接口族
Spring中提供了各种Aware接口,方便从上下文中获取当前的运行环境,常见的包括:BeanFactoryAware,BeanNameAware,ApplicationContextAware,EnvironmentAware,BeanClassLoaderAware等。
BeanFactoryAware接口:通过它可以拿到Spring容器中的Bean。通过调用getBean方法就可以拿到特定的Bean,使用BeanFactoryAware的好处是,需要动态获取具体Bean的时候很方便。实现方式很简单:
public class BeanFactoryAwareUtil implements BeanFactoryAware {
private BeanFactory beanFactory;
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
public Object getBean(String beanName) {
return beanFactory.getBean(beanName);
}
}
ApplicationContextAware接口:类似于BeanFactoryAware,区别就是ApplicationContext是BeanFactory的区别。
EnvironmentAware接口:凡注册到Spring容器内的bean,实现了EnvironmentAware接口重写setEnvironment方法后,在工程启动时可以获得application.properties的配置文件配置的属性值。
2、InitializingBean接口和DisposableBean接口
InitializingBean接口和DisposableBean接口可以在Bean被初始化和销毁后做一些工作,有时让容器来调用这些方法更方便。
@Component
public class SomeBean implements InitializingBean,DisposableBean{
public void afterPropertiesSet() throws Exception {
// 初始化
}
public void destroy() throws Exception {
// 释放资源
}
}
3、BeanPostProcessor接口和BeanFactoryPostProcessor接口
BeanFactoryPostProcessor和BeanPostProcessor都是Spring初始化bean的扩展点,二者的区别在于通过beanFactory可以获取bean的示例或定义,并可以修改bean的属性。
BeanFactoryPostProcessor可以对bean的定义进行处理,Spring容器允许BeanFactoryPostProcessor在容器实际实例化任何其它的bean之前读取配置元数据,并有可能修改它。可以配置多个BeanFactoryPostProcessor,执行次序可以配置。
实现BeanPostProcessor接口可以在Bean(实例化之后)初始化的前后做一些自定义的操作。
参考资料:
http://www.sohu.com/a/166804449_714863
https://blog.csdn.net/leileibest_437147623/article/details/80894569
更多推荐
所有评论(0)