zoukankan      html  css  js  c++  java
  • Spring的自动装配Bean

    spring的自动装配功能的定义:无须在Spring配置文件中描述javaBean之间的依赖关系(如配置<property>、<constructor-arg>)。IOC容器会自动建立javabean之间的关联关系。

    如果没有采用自动装配的话,手动装配我们通常在配置文件中进行实现:以下代码就是手动装配:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      
      <bean id="customerDAO" class="com.hebeu.customer.dao.JdbcCustomerDAO">
        <property name="dataSource" ref="dataSource" />
      </bean>
      
    </beans>

    通过<property name="dataSource" ref="dataSource" />向customerDAO的bean中注入了dataSource

    在Spring框架,可以用 auto-wiring 功能会自动装配Bean。要启用它,只需要在 <bean>定义“autowire”属性。

    1
    <bean id="customer" class="com.yiibai.common.Customer" autowire="byName" />

    在Spring中,支持 5 自动装配模式。

    • no – 缺省情况下,自动配置是通过“ref”属性手动设定
    • byName – 根据属性名称自动装配。如果一个bean的名称和其他bean属性的名称是一样的,将会自装配它。
    • byType – 按数据类型自动装配。如果一个bean的数据类型是用其它bean属性的数据类型,兼容并自动装配它。
    • constructor – 在构造函数参数的byType方式。

    第一种自动装配【根据属性名称自动装配】

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package com.hebeu.model;
      
    public class Customer {
      
      private Address address;
        
      public Customer() {
          
      }
        
      public Customer(int id, Address address) {
        super();
        this.address = address;
      }
      
      public Address getAddress() {
        return address;
      }
      
      public void setAddress(Address address) {
        this.address = address;
      }
        
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package com.hebeu.model;
      
    public class Address {
      
      private String fulladdress;
        
      public Address(){
          
      }
        
      public Address(String addr){
        this.fulladdress = addr;
      }
      
      public String getFulladdress() {
        return fulladdress;
      }
      
      public void setFulladdress(String fulladdress) {
        this.fulladdress = fulladdress;
      }
        
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        
      <bean id="customer" class="com.hebeu.model.Customer" autowire="byName"></bean>
        
      <bean id="address" class="com.hebeu.model.Address">
        <property name="fulladdress" value="YiLong Road, CA 188"></property>
      </bean>
        
    </beans>

    这样就将address注入到Customer中。这就是自动注入ByName.在Customer bean中公开了一个属性address,Spring容器会找到address bean,并且装配。这里必须要注意,Customer中要被注入的bean的set方法要求必须是public的,否则会报空指针异常。还有配置的bean的id必须和Customer中声明的变量名相同。

    第二种自动装配【根据数据类型自动装配】

    声明的俩个bean同样为Customer以及Address,将applicationContext.xml转换为这样的就是实现根据数据类型进行自动装配。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        
      <bean id="customer" class="com.hebeu.model.Customer" <strong><span style="color:#FF0000;">autowire="byType"</span></strong>></bean>
        
      <bean id="bean1" class="com.hebeu.model.Address">
        <property name="fulladdress" value="YiLong Road, CA 188"></property>
      </bean>
    </beans

    类型自动装配的意思是如果一个bean的数据类型与其他的bean属性的数据类型相同,将会自动兼容装配它。当然要求只能配置一个某一个类型的bean.如果配置成这样,那么是会出错的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        
      <bean id="customer" class="com.hebeu.model.Customer" autowire="byType"></bean>
        
      <bean id="bean1" class="com.hebeu.model.Address">
        <property name="fulladdress" value="YiLong Road, CA 188"></property>
      </bean>
      <bean id="bean2" class="com.hebeu.model.Address">
        <property name="fulladdress" value="YiLong Road, CA 188"></property>
      </bean>
    </beans>

    第三种自动装配【根据构造方法自动装配】

    案例同上,将applicationContext.xml转换为如下,就实现了按照构造方法自动装配:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        
      <bean id="customer" class="com.hebeu.model.Customer">
        <!-- 构造方法的参数 -->
        <constructor-arg>
          <ref bean="bean1"/>
        </constructor-arg>
      </bean>
        
      <bean id="bean1" class="com.hebeu.model.Address">
        <property name="fulladdress" value="YiLong Road, CA 188"></property>
      </bean>
        
    </beans>

     它实际上是构造函数的参数类型自动装配。这意味着如果一个bean的数据类型与其他bean的构造器参数的数据类型是相同的,那么就自动装配。

    转载:https://www.jb51.net/article/106856.htm

  • 相关阅读:
    oracle11g dataguard部署指南
    扩展Oracle表空间
    ORACLE SQLloader详细语法
    Oracle Data Guard
    struts2学习(4)struts2核心知识III
    struts2学习(3)struts2核心知识II
    struts2学习(2)struts2核心知识
    struts2学习(1)struts2 helloWorld
    java单例模式等一些程序的写法....持续更新...
    峰Spring4学习(8)spring对事务的支持
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/9424804.html
Copyright © 2011-2022 走看看