美文网首页spring
Spring实现Aware接口,完成对IOC容器的感知

Spring实现Aware接口,完成对IOC容器的感知

作者: java面试收割机 | 来源:发表于2017-09-20 14:45 被阅读9次

    aware主要有以下感知接口,只要在程序里实现相关接口,就可以获取该aware相关的信息

    BeanNameAware,可以在Bean中得到它在IOC容器中的Bean的实例的名字。
    BeanFactoryAware,可以在Bean中得到Bean所在的IOC容器,从而直接在Bean中使用IOC容器的服务。
    ApplicationContextAware,可以在Bean中得到Bean所在的应用上下文,从而直接在Bean中使用上下文的服务。
    MessageSourceAware,在Bean中可以得到消息源。
    ApplicationEventPublisherAware,在bean中可以得到应用上下文的事件发布器,从而可以在Bean中发布应用上下文的事件。
    ResourceLoaderAware,在Bean中可以得到ResourceLoader,从而在bean中使用ResourceLoader加载外部对应的Resource资源。

    1、BeanNameAware:获取bean的名称,如:

    @Service
    public class BeanNameAwareTest implements BeanNameAware {
    
        private String name;
        
        @Override
        public void setBeanName(String name) {
            this.name = name;
        }
    
        public String getBeanName() {
            return this.name;
        }
    }
    

    获取bean:

                @Autowired
            private BeanNameAwareTest beanNameAwareTest;
            public void aware()  {  
                 System.out.println( "=========:"+beanNameAwareTest.getBeanName());
                 beanNameAwareTest.setBeanName("beanName");
                 System.out.println( "====================:"+beanNameAwareTest.getBeanName());
            }
    

    结果:

    =========:beanNameAwareTest
    =========:beanName
    

    BeanFactoryAware:可以在Bean中得到Bean所在的IOC容器,从而直接在Bean中使用IOC容器的服务。

    @Service
    public class BeanFactoryAwareTest implements BeanFactoryAware {
    
        private BeanFactory beanFactory;
    
        @Override
        public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
                this.beanFactory = beanFactory;
        }
        
        public BeanFactory getBeanFactory()  {
              return this.beanFactory ;
        }
    }
    

    获取bean工厂进行bean操作:

            @Autowired
            private BeanFactoryAwareTest beanFactoryAwareTest;
     public void aware()  {  
          System.out.println("获取相应的bean:"+beanFactoryAwareTest.getBeanFactory().getBean("beanFactoryAwareTest"));
            }
    

    结果:

    获取相应的bean:com.xebest.util.aware.BeanFactoryAwareTest@3c20f83d
    

    其他的aware用同样的方式重写set方法,然后在添加get获取到对象,实现相关操作

    相关文章

      网友评论

        本文标题:Spring实现Aware接口,完成对IOC容器的感知

        本文链接:https://www.haomeiwen.com/subject/bihosxtx.html