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回调方式类似
  • 相关阅读:
    [Python]爬虫v0.1
    [Python]同是新手的我,分享一些经验
    [python]闭包到底是什么鬼?
    测试Flask应用_学习笔记
    Flask模板_学习笔记
    SQL Server Alwayson概念总结
    JDBC数据库编程:ResultSet接口
    JDBC操作,执行数据库更新操作
    接口怎么实例化?
    java数据库编程:JDBC操作及数据库
  • 原文地址:https://www.cnblogs.com/draymond/p/12911163.html
Copyright © 2011-2022 走看看