天天看點

ApplicationContextAware

spring 中的有一個ApplicationContextAware接口可以幫助我們在自定義的bean中得到spring 應用的上下文(ApplicationContext),隻要自定義的bean 實作 這個接口,并重寫其setApplicationContext 方法即可。

<!-- 掃描jar包 -->
<context:component-scan base-package="com.prcsteel.peanut"/>
<bean id="restAppContextAware" class="com.prcsteel.peanut.config.RestAppContextAware"/>
           
public class RestAppContextAware implements ApplicationContextAware {

    private static final Logger logger = LoggerFactory.getLogger(RestAppContextAware.class);

    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}
           

再結合 @PostConstruct 注解可以bean 初始化時運用applicationContext自行處理一些邏輯,例如:加載自定義注解等。

public RestAppContextAware() {
        logger.info("初始化構造函數");
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
        logger.info("在初始化 RestAppContextAware 得到應用上下文 {}",this.applicationContext.toString());
    }

    @PostConstruct
    public void init(){
        logger.info("在初始化 RestAppContextAware 之前,運用 {}處理一些邏輯",this.applicationContext);
    }

    @PreDestroy
    public void destroy(){
        logger.info("在銷毀 RestAppContextAware 之前,運用 {}處理一些邏輯",this.applicationContext);
    }
           

啟動應用程式加載該bean時即可在init方法中處理自定義的邏輯。

構造函數,setApplicationContext ,init 方法三者的執行順序為:

構造函數–>setApplicationContext–>init