zoukankan      html  css  js  c++  java
  • spring bean autowire自动装配

    转自:http://blog.csdn.net/xiao_jun_0820/article/details/7233139

    autowire="byName"会自动装配属性与Bean id相同的Bean,例如有两个BEAN,

    <bean id="userDAO" class="com.springdemo.dao.AdminDAO"></bean>
    <bean id="userService3" autowire="byName" class="com.springdemo.service.UserService"></bean>

    UserService类中有一个userDAO属性:

    private IUserDAO userDAO;

     public IUserDAO getUserDAO() {
      return userDAO;
     }

     public void setUserDAO(IUserDAO userDAO) {
      this.userDAO = userDAO;
     }

    这样在创建userService3这个BEAN的时候会byName找到userDAO这个BEAN然后setter注入到userService3这个BEAN实例中去。

    如果userService3中同时又设置了setter注入,如下:

    <bean id="clientDAO"  class="com.springdemo.dao.ClientDAO"></bean>

    <bean id="userService2"  autowire="byName"
      class="com.springdemo.service.UserService">
      <property name="userDAO">
       <ref bean="clientDAO" />
      </property>
     </bean>

    这时候既有autowire又有property,那么property的setter会覆盖autowire的setter注入,这时候UserService类中的userDAO其实是com.springdemo.dao.ClientDAO类型,而不是com.springdemo.dao.AdminDAO

    表 3.2. Autowiring modes

    模式说明
    no  
    byName

    根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。

    byType

    如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring抛出异常。

    constructor

    byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。

    autodetect

    通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。

  • 相关阅读:
    JS中的事件&对象
    WSL使用小结:从ArchLinux到Manjaro
    WSL学习:安装ArchLinux和Root/Cling以及注意事项
    Qt5网络请求使用及WebRequest函数
    有道词典中的OCR功能:第三方库的变化
    C++学习(二):学会使用stringstream
    C语言集锦(三)Direct3D和GDI+的例子
    网络那些事:浏览器、网络协议以及常见软件
    C++学习(一):现代C++尝试
    PostScript学习:另一种缩写为PS的技术
  • 原文地址:https://www.cnblogs.com/wangpei/p/3656766.html
Copyright © 2011-2022 走看看