• 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

  • 相关阅读:
    Android中View绘制流程以及invalidate()等相关方法分析
    开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
    servlet上传文件报错(一)
    白话经典算法系列之六 高速排序 高速搞定
    POJ1177+线段树+扫描线
    tensorflow compile
    算法编程题的心得体会
    算法编程题的心得体会
    标识变量的使用
    标识变量的使用
  • 原文地址:https://www.cnblogs.com/langtianya/p/5015828.html
Copyright © 2020-2023  润新知