zoukankan      html  css  js  c++  java
  • spring的aware是怎么被回调的

    spring-ioc流程

      1:将bean放到一个容器中

      2:spring中的aware的子类规定好回调接口

    public interface ApplicationContextAware extends Aware {
    
        void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
    
    }

      3:写一个接口,实现 ApplicationContextAware

    @Component
    @Configuration
    public class WebApplicationContextAware implements ApplicationContextAware {
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            System.out.println("---- ApplicationContextAware ----");
        }
    }

            4:遍历容器中的每个bean与Aware比较

        private void invokeAwareInterfaces(Object bean) {
            if (bean instanceof Aware) {
                if (bean instanceof EnvironmentAware) {
                    ((EnvironmentAware) bean).setEnvironment(this.applicationContext.getEnvironment());
                }
                if (bean instanceof EmbeddedValueResolverAware) {
                    ((EmbeddedValueResolverAware) bean).setEmbeddedValueResolver(this.embeddedValueResolver);
                }
                if (bean instanceof ResourceLoaderAware) {
                    ((ResourceLoaderAware) bean).setResourceLoader(this.applicationContext);
                }
                if (bean instanceof ApplicationEventPublisherAware) {
                    ((ApplicationEventPublisherAware) bean).setApplicationEventPublisher(this.applicationContext);
                }
                if (bean instanceof MessageSourceAware) {
                    ((MessageSourceAware) bean).setMessageSource(this.applicationContext);
                }
                if (bean instanceof ApplicationContextAware) {
                    ((ApplicationContextAware) bean).setApplicationContext(this.applicationContext);
                }
            }
        }

      当bean是  Aware 的实现类,则进行下一步处理。直到使用 bean 调用 对应的方法

     

    WebApplicationContextAware 注入到ioc容器后,遍历容器中的bean的时候,判断该bean是否为Aware类型的,如果是,会用ioc容貌后期中的 webApplicationContextAware 调用 setApplicationContext 方法。。实现其他类型的Aware回调方式类似
  • 相关阅读:
    MacOS Sierra允许运行任何来源的程序
    Windows Server2008 R2中的角色
    Linux根目录解析
    Linux安装配置SVN服务器
    Linux6.x修改出eth0网卡的解决方法
    如何利用mount命令挂载另一台服务器上的目录
    Arcgis水文分析-Dem提取集水区
    前端布局之Flex布局
    其实我就是想好好的写写代码(一个伪程序猿的独白)
    WebApi关于配置全局返回Json数据格式时间以及命名小写
  • 原文地址:https://www.cnblogs.com/draymond/p/12911163.html
Copyright © 2011-2022 走看看