• spring心得6自动装配知识点讲解及案例分析


    1.自动装配

       spring3.2以上版本有四种自动装配类型:

        1).byName:寻找和属性名相同的bean,若找不到,则装不上。

        2).byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。

        3).constructor:按照参数的类型装配;找不到,装不上;在有与bean实例类中属性相同的id时,即使存在同一个类型的多个bean也不会抛异常,否则反之找到多个就会抛异常。

       4)no:不使用自动装配

       自动装配主要通过bean标签的autowire属性配置相应的自动装配方式使用byType和constructor自动装配时,若找到多个符合条件的bean,会报异常,因此最好的方式是不用自动组装

    2.自动装配案例剖析

       下面主要列出相关的spring配置文件和主要的bean,用来测试的测试类和辅助就不再赘述了;

    主要的bean实例
    package www.csdn.spring.autowire;
    
    public class EmpBean {
    
    	private String name;
    	private DeptBean deptBean;
    	private CompBean compBean;
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	/*
    	 * public void setDeptBean(DeptBean deptBean) { this.deptBean = deptBean; }
    	 * public void setCompBean(CompBean compBean) { this.compBean = compBean; }
    	 */
    
    	@Override
    	public String toString() {
    		return "EmpBean [name=" + name + ", deptBean=" + deptBean
    				+ ", compBean=" + compBean + "]";
    	}
    
    	public EmpBean(DeptBean deptBean, CompBean compBean) {
    		super();
    		this.deptBean = deptBean;
    		this.compBean = compBean;
    	}
    
    }
      按byName自动装配的配置文件
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
    
           <bean id="compBean" class="www.csdn.spring.autowire.CompBean">
             <property name="name" value="DELL"/>
           </bean>
           
           <bean id="deptBean" class="www.csdn.spring.autowire.DeptBean">
             <property name="name" value="销售部门"/>
           </bean>
           
           <!-- 使用autoWrie自动装配,改属性值byName;
                        能让其自动装配的前提是bean实例中的属性值名称与配置文件中引入的类型id一致-->
                        
           <bean id="empBean" class="www.csdn.spring.autowire.EmpBean" autowire="byName">
              <property name="name" value="杨凯"/>
    <!--           <property name="comp" ref="compBean"/>
              <property name="dept" ref="deptBean"/> -->
           </bean>
    </beans>
    按byType自动装配的配置文件
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
    
           <bean id="compBean" class="www.csdn.spring.autowire.CompBean">
             <property name="name" value="DELL"/>
           </bean>
           
           <bean id="deptBean" class="www.csdn.spring.autowire.DeptBean">
             <property name="name" value="销售部门"/>
           </bean>
           <!-- 
              这里只能出现一个deotBean,id名不一样但是类型一样,都是deptBean实体的;id="deptBean"或同类型的不同id都会抛异常
           <bean id="deptBean1" class="www.csdn.spring.autowire.DeptBean">
             <property name="name" value="销售部门"/>
           </bean> -->
           
           <!-- 使用autoWrie自动装配,改属性值byType;
                        按类型自动装配,前提是同一个类型的只能有一个-->
                        
           <bean id="empBean" class="www.csdn.spring.autowire.EmpBean" autowire="byType">
              <property name="name" value="杨凯"/>
    <!--           <property name="comp" ref="compBean"/>
              <property name="dept" ref="deptBean"/> -->
           </bean>
    </beans>
       按constructor自动装配的配置文件
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd">
    
           <bean id="compBean" class="www.csdn.spring.autowire.CompBean">
             <property name="name" value="DELL"/>
           </bean>
           
           
           <!-- 在spring3.2以上版本中:使用构造器自动装配时,如果有一个id与bean实例中的属性名相同的配置bean存在,虽然构造器自动装配是按类型自动装配的,
                 但是即使有多个相同类型的bean存在也不受影响;受影响的情况是:没有与bean实例中的属性名相同的配置bean存在,
                 又有多个相同类型的bean配置,就会抛异常-->
           <bean id="deptBean" class="www.csdn.spring.autowire.DeptBean">
             <property name="name" value="销售部门"/>
           </bean>
           
           <bean id="deptBean1" class="www.csdn.spring.autowire.DeptBean">
             <property name="name" value="销售部门"/>
           </bean>
    
           <bean id="deptBean2" class="www.csdn.spring.autowire.DeptBean">
             <property name="name" value="销售部门"/>
           </bean> 
           
           <!-- 使用autoWrie自动装配,改属性值constructor;构造器自动装配就是按类型自动装配
                        beam实例中必须结合构造器使用,如果没有构造器自动装配后注入不进去值,取出为空值-->
                        
           <bean id="empBean" class="www.csdn.spring.autowire.EmpBean" autowire="constructor">
              <property name="name" value="杨凯"/>
    <!--           <property name="comp" ref="compBean"/>
              <property name="dept" ref="deptBean"/> -->
           </bean>
    </beans>
    


  • 相关阅读:
    2017沈阳站 Tree
    P2146 [NOI2015]软件包管理器
    hdu3307 欧拉函数
    poj 3126 Prime Path bfs
    CSL的字符串
    P1045 麦森数
    洛谷 P1338 末日的传说
    树链剖分
    SQL[Err] ORA-00933: SQL command not properly ended
    Postman 快速入门之脚本
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3061652.html
Copyright © 2020-2023  润新知