zoukankan      html  css  js  c++  java
  • spring之BeanFactoryAware接口

    springBeanFactoryAware 

    (转)要直接在自己的代码中读取spring的bean,我们除了根据常用的set外,也可以通过spring的BeanFactoryAware接口实现,只要实现setBeanFactory方法就可以,

    Java代码  收藏代码
    1. private BeanFactory               beanFactory;  
    2.   
    3. public void setBeanFactory(BeanFactory beanFactory) throws BeansException {  
    4. this.beanFactory = beanFactory;  
    5. }  

     

    这样我们就可以直接拿东西用了,如

    Java代码  收藏代码
    1. Object  object = beanFactory.getBean(beanName);  

     

    我们既然可以通过set来拿到我们要的对象,为什么还要用这个beanFactory呢,道理很简单,因为有些情况是需要动态的去获取 对象的,比如说我有10个银行的处理对象,他们都继承了我的BankService对象,但是具体处理的时候要哪家银行的对象呢?这个依赖于用户的选择。 你可以注入10个BankService实例,然后用if --else来搞,不过那样太坨了。每增加一家银行你都需要改代码。

    通过beanFactory的话,那就一行代码搞定,只要给beanName就OK了,动点脑筋吧beanName配置的有规律点,然后根据用户的银行选择,凑出个beanName,大功告成了!

    另外注意:

    使用ClassPathXmlApplicationContext 加载bean.xml文件才能将实现BeanFactoryAware接口的bean的BeanFactory注入进去。

    spring的IoC容器核心为BeanFactory接口,该接口的最常用实现是XmlBeanFactory类,该类使用xml配置文件来初始化一个BeanFactory实例。

    ApplicationContext是对BeanFactory接口的扩展,在大多数的应用中,使用ApplicationContext的优先级要高于BeanFactory,两者对比如下:

    特性

    BeanFactory

    ApplicationContext

    Bean 实例化/装配

    Yes

    Yes

    自动 BeanPostProcessor 注册

    No

    Yes

    自动 BeanFactoryPostProcessor 注册

    No

    Yes

    便捷的 MessageSource 访问( i18n)

    No

    Yes

    ApplicationEvent 发送

    No

    Yes

  • 相关阅读:
    golang ---cron
    Maven私库安装与配置
    Java8新特性之重复注解(repeating annotations)浅析
    String split
    如何将xml转为python中的字典
    json字符串和dict互转
    为什么空格拷贝到linux 会变成两个
    python之socket编程
    ntpdate设置
    Nginx配置ssl证书
  • 原文地址:https://www.cnblogs.com/langtianya/p/5015828.html
Copyright © 2011-2022 走看看