Spring中爲何繼承了ApplicationContextAware接口就可使用ApplicationContext對象?

1Spring中使用applicationContext對象
spring

public class SpringContextUtil implements ApplicationContextAware
{
    private static ApplicationContext applicationContext;
 
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
    {
        applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext()
    {
        return applicationContext;
    }
}

 

2、爲何繼承ApplicationContextAware就可使用applicationContext對象?app

     使用後置處理器ide

 

3、什麼是後置處理器?
      後置處理器主要是對bean進行加強,包括在bean初始化前和初始化後進行加強,如修改bean屬性、對bean的方法進行代理等。post

 

public interface BeanPostProcessor {
     // bean初始化前加強
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
// bean初始化後加強
    default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

 

 

4、後置處理器怎樣調用setApplicationContext賦值this

     內置後置處理器:org.springframework.context.support.ApplicationContextAwareProcessorspa

class  ApplicationContextAwareProcessor implements BeanPostProcessor 

public Object postProcessBeforeInitialization(final Object bean, String beanName) throws BeansException {
    
        else {
            invokeAwareInterfaces(bean);
        }

        return bean;
    }

private void invokeAwareInterfaces(Object bean) {
        if (bean instanceof Aware) {
            // 對繼承於ApplicationContextAware的bean調用setApplicationContext方法進行賦值
            if (bean instanceof ApplicationContextAware) {
                ((ApplicationContextAware) bean).setApplicationContext(this.applicationContext);
            }
        }
    }

 

五、參考資料.net

    http://www.javashuo.com/article/p-mjinefrd-my.html代理

相關文章
相關標籤/搜索