4、spring自動裝配(spring筆記)

一、根據名稱自動裝配屬性(工程spring_autowire_byName

這種方式一般用在開發階段,用于提供我們的開發效率。我們通過一個示例進行說明。
相關實體:
Bean2.java

private Bean3 bean3;
private Bean4 bean4;
private Bean5 bean5;

Bean3.java

private int id;
private String name;
private String password;

Bean4.java

private int id;
private String name;

Bean5.java

private int age;

配置:applicationContext-beans.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
           default-autowire="buName">

    <!-- <bean id="bean2" class="com.bjsxt.spring.Bean2">
        <property name="bean3" ref="bean3" />
        <property name="bean4">
            <ref bean="bean4" />
        </property>
        <property name="bean5" ref="bean5" />
    </bean> -->
    
    <bean id="bean2" class="com.bjsxt.spring.Bean2" />

    <bean id="bean5" class="com.bjsxt.spring.Bean5">
        <property name="age" value="20" />
    </bean>
</beans>

applicationContext-other.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
   
   <bean id="beanAbstract" abstract="true">
        <property name="id" value="1000"/>
        <property name="name" value="Jack"/>
   </bean>         
   
   <bean id="bean3" class="com.bjsxt.spring.Bean3" parent="beanAbstract">
        <property name="name" value="Tom"/>
        <property name="password" value="123"/>
   </bean>        
   
   <bean id="bean4" class="com.bjsxt.spring.Bean4" parent="beanAbstract"/>
</beans>

說明:這里我們之所以可以這樣簡單的配置Bean2類,是因為我們在Bean2類中的屬性名字和Bean3、Bean4、Bean5這些類中配置的id號是名字是一樣的,同時提供了getter和setter方法,這樣spring就會根據這個名字去找相應的類,然后實例化之后注入進來,當然這樣配置之后是不會生效的,我們需要在<beans>標簽中配置default-autowire="byName"。這種方式一般用在開發階段,在項目發布時不推薦這樣做,因為在配置文件中看不到一個bean的屬性,不利于維護,一般在開發完之后再改成一般方式。

測試:AutowireTest.java

package com.bjsxt.spring;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import junit.framework.TestCase;

public class AutowireTest extends TestCase {
    
    private BeanFactory factory;
    
    @Override
    protected void setUp() throws Exception {
        factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");   
    }

    public void testAutowire() {
        Bean2 bean2 = (Bean2)factory.getBean("bean2");
        System.out.println("bean2.bean3.id=" + bean2.getBean3().getId());
        System.out.println("bean2.bean3.name=" + bean2.getBean3().getName());
        System.out.println("bean2.bean3.password=" + bean2.getBean3().getPassword());
        System.out.println("bean2.bean4.id=" + bean2.getBean4().getId());
        System.out.println("bean2.bean4.name=" + bean2.getBean4().getName());
        System.out.println("bean2.bean5.age=" + bean2.getBean5().getAge());
    }
    
}

二、根據類型自動裝配(工程spring_autowrire_byType

這里所有的類和配置都和上面一樣,但是在<beans>標簽中配置default-autowire="byType",此時spring會根據各個類的實際類型去找相關的實體類,id可以隨便起名或者忽略。我們推薦使用這種方式進行配置。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,915評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,950評論 6 342
  • 什么是Spring Spring是一個開源的Java EE開發框架。Spring框架的核心功能可以應用在任何Jav...
    jemmm閱讀 16,549評論 1 133
  • Spring 概述 1. 什么是spring? Spring 是個java企業級應用的開源開發框架。Spring主...
    李序鍇閱讀 2,514評論 0 13
  • “這世間所有相遇都指向團聚,唯有你與我的指向別離。” - 〔一〕 風聲一嘯,輕易拂去萬物根基。 越過謊言綿延的山,...
    扶曦閱讀 744評論 0 1