• 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方式。

  • 相关阅读:
    微信小程序登录
    cURL error 60: SSL certificate problem: unable to get local issuer certificate 报错解决
    MyBatis学习之一----基础了解
    web工程和java工程的区别
    StringUtils的实用功能
    SpringMVC-----部分功能学习
    SpringMVC之国际化
    SpringMVC
    web.xml配置详解
    Hibernate学习-----遇到的相关问题
  • 原文地址:https://www.cnblogs.com/wangpei/p/3656766.html
Copyright © 2020-2023  润新知