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

  • 相关阅读:
    1. 关于GCD的使用(串并行队列和同步异步函数的问题)
    陌院俅颗难炎先当粮澜
    openresty在centos/redhat6.7上部署
    tomcat 日志那点事
    Redhat6.7 切换Centos yum源
    Quartz corn时间表达式(转)
    Jquery控制滚动Div 滚动条事件
    fastjson排序 Map多层嵌套转换自动排序问题终极解决方案
    Spring 外部注入Bean (JAX-WS)
    SSH,如何恢复通过输入密码的方式来登录服务器
  • 原文地址:https://www.cnblogs.com/langtianya/p/5015828.html
Copyright © 2011-2022 走看看