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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐