亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Spring 自動裝配

Spring框架的自動裝配功能使您可以隱式注入對象依賴項。它在內(nèi)部使用setter或構(gòu)造函數(shù)注入。

自動裝配不能用于注入基本值和字符串值。它僅適用于參考。

自動裝配的優(yōu)點

它需要 更少的代碼,因為我們不需要編寫代碼來顯式注入依賴項。

自動裝配的缺點

沒有程序員的控制權(quán)。

它不能用于原始值和字符串值。

自動裝配模式

有很多自動裝配模式:

模式說明
no這是默認(rèn)的自動裝配模式。這意味著默認(rèn)情況下沒有自動裝配。
byNamebyName模式根據(jù)bean的名稱注入對象依賴項。在這種情況下,屬性名稱和bean名稱必須相同。它在內(nèi)部調(diào)用setter方法。
byTypebyType模式根據(jù)類型注入對象依賴項。因此屬性名稱和bean名稱可以不同。它在內(nèi)部調(diào)用setter方法。
constructor構(gòu)造函數(shù)模式通過調(diào)用類的構(gòu)造函數(shù)來注入依賴項。它會調(diào)用具有大量參數(shù)的構(gòu)造函數(shù)。
autodetect從Spring 3開始不推薦使用。

自動裝配示例

讓我們看一下在Spring使用自動裝配的簡單代碼。您需要使用bean元素的autowire屬性來應(yīng)用自動裝配模式。

<bean id="a" class="org.sssit.A" autowire="byName"></bean>

讓我們看看Spring自動布線的完整示例。為了創(chuàng)建此示例,我們創(chuàng)建了4個文件。

B.java A.java applicationContext.xml Test.java

B.java

此類僅包含構(gòu)造函數(shù)和方法。

package org.sssit;
public class B {
B(){System.out.println("b is created");}
void print(){System.out.println("hello b");}
}

A.java

此類包含B類的引用以及構(gòu)造函數(shù)和方法。

package org.sssit;
public class A {
B b;
A(){System.out.println("a is created");}
public B getB() {
  return b;
}
public void setB(B b) {
  this.b = b;
}
void print(){System.out.println("hello a");}
void display(){
  print();
  b.print();
}
}

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"
  xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byName"></bean>
</beans>

Test.java

此類從applicationContext.xml文件獲取Bean并調(diào)用顯示方法。

package org.sssit;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
  ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
  A a=context.getBean("a",A.class);
  a.display();
}
}

輸出:

b is created
a is created
hello a
hello b

1)byName自動裝配模式

在byName自動裝配模式下,bean id和引用名稱必須相同。

內(nèi)部使用setter注射。

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byName"></bean>

但是,如果更改bean的名稱,它將不會注入依賴項。

讓我們看看將bean的名稱從b更改為b1的代碼。

<bean id="b1" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byName"></bean>

2)byType自動裝配模式

在byType自動裝配模式下,bean ID和引用名稱可能不同。但是只能有一個類型的bean。

內(nèi)部使用setter注入。

<bean id="b1" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byType"></bean>

在這種情況下,它可以正常工作,因為您創(chuàng)建了B類型的實例。沒關(guān)系,您可以使用與引用名稱不同的Bean名稱。

但是,如果您具有一種類型的多個Bean,它將不起作用并拋出異常。

讓我們看看代碼中有很多B型bean。

<bean id="b1" class="org.sssit.B"></bean>
<bean id="b2" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="byName"></bean>

在這種情況下,它將引發(fā)異常。

3)構(gòu)造函數(shù)自動裝配模式

在構(gòu)造函數(shù)自動裝配模式下,spring容器通過最高參數(shù)化的構(gòu)造函數(shù)注入依賴項。

如果一個類中的3個構(gòu)造函數(shù),零參數(shù),一個參數(shù)和兩個參數(shù),然后通過調(diào)用兩個參數(shù)構(gòu)造函數(shù)執(zhí)行注入。

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="constructor"></bean>

4)沒有自動裝配模式

在沒有自動裝配模式的情況下,spring容器不會通過自動裝配注入依賴項。

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="no"></bean>