spring中获取ApplicationContext对象的技巧,含源码说明

第一步,实现接口ApplicationContextAware,重写setApplicationContext方法,下方代码标红的地方,绿色部分 可以通过声明来进行存储到本类中。

@Component
public class Test implements ApplicationContextAware{//实现ApplicationContextAware 就可以获取ioc容器
    
    private ApplicationContext applicationContext;
    
    public Test (){
        
        System.out.println("Test constructor");
    }
    
    @PostConstruct
    public void  init(){
        System.out.println("Test @PostConstruct");
    }
    
    @PreDestroy
    public void detory(){
        System.out.println("Test @PreDestroy");
    }

    public void setApplicationContext(ApplicationContext applicationContext)//这个方法可以吧ioc容器存进来,我们就可以将applicationContext保存起来
            throws BeansException {
        // TODO Auto-generated method stub
        
        this.applicationContext=applicationContext;
        
    }
    

}

下面来说一说 这个ApplicationContext 对象时怎么放进来的,

通过断点 我们看一下ApplicationContextAwareProcessor类实现了BeanPostProcessor类,在下图中的ApplicationContextAwareProcessor类中postProcessBeforeInitialization方法判断类是否实现了如下类,如果有则进入invokeAwareInterfaces方法

 spring中获取ApplicationContext对象的技巧,含源码说明

invokeAwareInterfaces方法中判断实现类,将applicationContext存入ApplicationContextAwareset方法中,通过set方法我们就可以拿到applicationContext这个ioc对象了

 spring中获取ApplicationContext对象的技巧,含源码说明

 

spring中获取ApplicationContext对象的技巧,含源码说明

上一篇:[BJDCTF2020]EzPHP


下一篇:create-react-app ios8系统中页面空白/样式错乱问题