zoukankan      html  css  js  c++  java
  • Spring中为什么继承了ApplicationContextAware接口就可以使用ApplicationContext对象?

    1Spring中使用applicationContext对象

    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对象?

         使用后置处理器

    3、什么是后置处理器?
          后置处理器主要是对bean进行增强,包括在bean初始化前和初始化后进行增强,如修改bean属性、对bean的方法进行代理等。

    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赋值

         内置后置处理器:org.springframework.context.support.ApplicationContextAwareProcessor

    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);
                }
            }
        }

    5、参考资料

        https://blog.csdn.net/baomw/article/details/84262006

  • 相关阅读:
    mysql高效分页
    mybatis插入值为空时需要制定类型
    NoClassDefFoundError
    mybatis动态sql中的两个内置参数(_parameter和_databaseId)
    Java位运算在程序设计中的使用:位掩码(BitMask)
    基于netty的聊天室(保持和获取客户端channel)
    Netty自定义协议半包编解码
    位运算基础
    JAVA加密系列(四)- 位运算加密(异或加密)
    位运算基础
  • 原文地址:https://www.cnblogs.com/gossip/p/11694469.html
Copyright © 2011-2022 走看看