程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring自動裝配的學習

Spring自動裝配的學習

編輯:關於JAVA

在xml配置文件中,autowire有6種類型,可以在<bean/>元素中使用autowire屬性指定:

模式                        說明
no                       不使用自動裝配,必須通過ref元素指定依賴,默認設置。
byName                    根據屬性名自動裝配。此選項將檢查容器並根據名字查找與
屬性完全一致的bean,並將其與屬性自動裝配。
byType                    如果容器中存在一個與指定屬性類型相同的bean,那麼將與
該屬性自動裝配;如果存在多個該類型bean,那麼拋出異常,並指出不能使用byType方式進行自動裝配;如果沒有找到相匹配的bean,則什麼事都不發生,也可以通過設置dependency-check="objects"讓Spring拋出異常。
constructor與byType方式類似,不同之處在於它應用於構造器參數。如果容器中沒有找到與構造器參數類型一致的bean,那麼拋出異常。
autodetect通過bean類的自省機制(introspection)來決定是使用constructor還是byType方式進行自動裝配。如果發現默認的構造器,那麼將使用byType方式。
default

看代碼:

Computer.java

package com.redoffice;

public class Computer {

private Host host;
private Display display;

public Computer(){

}

public Computer(Host host, Display display) {
super();
this.host = host;
this.display = display;
}

public void run(){
System.out.println();
System.out.print("   "+host.run()+",");
System.out.println(display.run());
}

public Host getHost() {
return host;
}

public void setHost(Host host) {
this.host = host;
}

public Display getDisplay() {
return display;
}

public void setDisplay(Display display) {
this.display = display;
}
}

Host.java

package com.redoffice;

public class Host {
public String run() {
return "我是主機,正在運行!";
}
}

Display.java

package com.redoffice;

public class Display {
public String run() {
return "我是顯示器,正在運行!";
}
}

TestMain.java

package com.redoffice;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
    private static Log log = LogFactory.getLog(TestMain.class);
    public static void main(String[] args) {
        PropertyConfigurator.configure("bin/log4j.properties");
        log.debug("entering main method");
        ApplicationContext ac = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        //byName
        Computer computer1 = (Computer)ac.getBean("computer1");
        System.out.println("autowire=\"byName\":");
        computer1.run();
        //byType
        Computer computer2 = (Computer)ac.getBean("computer2");
        System.out.println("autowire=\"byType\":");
        computer2.run();
        //default
        Computer computer3 = (Computer)ac.getBean("computer3");
        System.out.println("autowire=\"default\":");
        computer3.run();
        //autodetect
        Computer computer4 = (Computer)ac.getBean("computer4");
        System.out.println("autowire=\"autodetect\":");
        computer4.run();
        //constructor
        Computer computer5 = (Computer)ac.getBean("computer5");
        System.out.println("autowire=\"constructor\":");
        computer5.run();
        //no
        Computer computer6 = (Computer)ac.getBean("computer6");
        System.out.println("autowire=\"no\":");
        computer6.run();
        log.debug("leaving main method");
    }
}

applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
default-autowire="autodetect">
<bean id="host" name="host" class="com.redoffice.Host"></bean>
<bean id="display" name="display" class="com.redoffice.Display"></bean>

<!-- autowire有no,constructor,byName,byType,default,autodetect幾種狀況 -->
<bean id="computer1" class="com.redoffice.Computer" autowire="byName"></bean>
<bean id="computer2" class="com.redoffice.Computer" autowire="byType"></bean>
<bean id="computer3" class="com.redoffice.Computer" autowire="default"></bean>
<bean id="computer4" class="com.redoffice.Computer" autowire="autodetect"></bean>
<!-- 在Computer類中必須有一個無參和有參的構造函數,否則報錯 -->
<bean id="computer5" class="com.redoffice.Computer" autowire="constructor">
<constructor-arg index="0">
<ref bean="host"/>
</constructor-arg>
<constructor-arg index="1">
<ref bean="display"/>
</constructor-arg>
</bean>
<bean id="computer6" class="com.redoffice.Computer" autowire="no">
<constructor-arg index="0">
<ref bean="host"/>
</constructor-arg>
<constructor-arg index="1">
<ref bean="display"/>
</constructor-arg>
</bean>
</beans>

希望有什麼不對的地方多多指教。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved