一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - 詳解Java的Spring框架下bean的自動(dòng)裝載方式

詳解Java的Spring框架下bean的自動(dòng)裝載方式

2020-03-09 12:34goldensun JAVA教程

這篇文章主要介紹了Java的Spring框架下bean的自動(dòng)裝載方式,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下

Spring容器可以自動(dòng)裝配相互協(xié)作bean之間的關(guān)系,這有助于減少對(duì)XML配置,而無需編寫一個(gè)大的基于Spring應(yīng)用程序的較多的<constructor-arg>和<property>元素。

自動(dòng)裝配模式:
有下列自動(dòng)裝配模式,可用于指示Spring容器使用自動(dòng)裝配依賴注入。使用<bean/>元素的autowire屬性為一個(gè)bean定義中指定自動(dòng)裝配模式。

byName模式
這種模式規(guī)定由自動(dòng)裝配屬性名稱。Spring容器在外觀上自動(dòng)線屬性設(shè)置為byName的XML配置文件中的bean。然后,它嘗試匹配和接線其屬性與配置文件中相同的名稱定義的Bean。如果找到匹配項(xiàng),它會(huì)注入這些bean,否則,它會(huì)拋出異常。

例如,如果一個(gè)bean定義設(shè)置為自動(dòng)裝配byName的配置文件,它包含aspellChecker屬性(即,它有一個(gè) setSpellChecker(...)方法),Spring就會(huì)查找名為拼寫檢查一個(gè)bean定義,并用它來設(shè)置該屬性。仍然可以使用的<property>標(biāo)簽連線其余屬性。下面的例子將說明這個(gè)概念。

來創(chuàng)建一個(gè)Spring應(yīng)用程序:
這里是TextEditor.java文件的內(nèi)容:

?
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.yiibai;
 
public class TextEditor {
  private SpellChecker spellChecker;
  private String name;
 
  public void setSpellChecker( SpellChecker spellChecker ){
   this.spellChecker = spellChecker;
  }
  public SpellChecker getSpellChecker() {
   return spellChecker;
  }
 
  public void setName(String name) {
   this.name = name;
  }
  public String getName() {
   return name;
  }
 
  public void spellCheck() {
   spellChecker.checkSpelling();
  }
}

下面是另外一個(gè)相關(guān)的類文件SpellChecker.java內(nèi)容:

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.yiibai;
 
public class SpellChecker {
  public SpellChecker() {
   System.out.println("Inside SpellChecker constructor." );
  }
 
  public void checkSpelling() {
   System.out.println("Inside checkSpelling." );
  }
  
}

以下是MainApp.java文件的內(nèi)容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.yiibai;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class MainApp {
  public static void main(String[] args) {
   ApplicationContext context =
       new ClassPathXmlApplicationContext("Beans.xml");
 
   TextEditor te = (TextEditor) context.getBean("textEditor");
 
   te.spellCheck();
  }
}

以下是在正常情況下的配置文件beans.xml文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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-3.0.xsd">
 
  <!-- Definition for textEditor bean -->
  <bean id="textEditor" class="com.yiibai.TextEditor">
   <property name="spellChecker" ref="spellChecker" />
   <property name="name" value="Generic Text Editor" />
  </bean>
 
  <!-- Definition for spellChecker bean -->
  <bean id="spellChecker" class="com.yiibai.SpellChecker">
  </bean>
 
</beans>

但是,如果要使用自動(dòng)裝配“byName”,那么XML配置文件將如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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-3.0.xsd">
 
  <!-- Definition for textEditor bean -->
  <bean id="textEditor" class="com.yiibai.TextEditor"
   autowire="byName">
   <property name="name" value="Generic Text Editor" />
  </bean>
 
  <!-- Definition for spellChecker bean -->
  <bean id="spellChecker" class="com.yiibai.SpellChecker">
  </bean>
 
</beans>

創(chuàng)建源代碼和bean配置文件完成后,讓我們運(yùn)行應(yīng)用程序。如果一切順利,這將打印以下信息:

?
1
2
Inside SpellChecker constructor.
Inside checkSpelling.

byType模式
式規(guī)定由自動(dòng)裝配屬性類型。Spring容器在外觀上autowire屬性設(shè)置為byType的XML配置文件中的bean。然后,它嘗試匹配和連接一個(gè)屬性,如果它的類型有完全相同的豆子名稱的一個(gè)匹配的配置文件。如果找到匹配項(xiàng),它會(huì)注入這些bean,否則,它會(huì)拋出異常。

例如,如果一個(gè)bean定義設(shè)置為自動(dòng)裝配byType的配置文件,它包含拼寫檢查類型的aspellChecker屬性,春季查找名為拼寫檢查一個(gè)bean定義,并用它來設(shè)置該屬性。仍然可以使用<property>標(biāo)簽接線其余屬性。下面的例子將說明這個(gè)概念,會(huì)發(fā)現(xiàn)和上面的例子沒有什么區(qū)別,除了XML配置文件已被更改。

同樣,來創(chuàng)建一個(gè)Spring應(yīng)用程序說明:
這里是TextEditor.java文件的內(nèi)容:

?
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.yiibai;
 
public class TextEditor {
  private SpellChecker spellChecker;
  private String name;
 
  public void setSpellChecker( SpellChecker spellChecker ) {
   this.spellChecker = spellChecker;
  }
  public SpellChecker getSpellChecker() {
   return spellChecker;
  }
 
  public void setName(String name) {
   this.name = name;
  }
  public String getName() {
   return name;
  }
 
  public void spellCheck() {
   spellChecker.checkSpelling();
  }
}

下面是另外一個(gè)相關(guān)的類文件SpellChecker.java內(nèi)容:

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.yiibai;
 
public class SpellChecker {
  public SpellChecker(){
   System.out.println("Inside SpellChecker constructor." );
  }
 
  public void checkSpelling() {
   System.out.println("Inside checkSpelling." );
  }
  
}

以下是MainApp.java文件的內(nèi)容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.yiibai;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class MainApp {
  public static void main(String[] args) {
   ApplicationContext context =
       new ClassPathXmlApplicationContext("Beans.xml");
 
   TextEditor te = (TextEditor) context.getBean("textEditor");
 
   te.spellCheck();
  }
}

以下是在正常情況下的配置文件beans.xml文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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-3.0.xsd">
 
  <!-- Definition for textEditor bean -->
  <bean id="textEditor" class="com.yiibai.TextEditor">
   <property name="spellChecker" ref="spellChecker" />
   <property name="name" value="Generic Text Editor" />
  </bean>
 
  <!-- Definition for spellChecker bean -->
  <bean id="spellChecker" class="com.yiibai.SpellChecker">
  </bean>
 
</beans>

但是,如果要使用自動(dòng)裝配“byType”,那么XML配置文件將如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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-3.0.xsd">
 
  <!-- Definition for textEditor bean -->
  <bean id="textEditor" class="com.yiibai.TextEditor"
   autowire="byType">
   <property name="name" value="Generic Text Editor" />
  </bean>
 
  <!-- Definition for spellChecker bean -->
  <bean id="SpellChecker" class="com.yiibai.SpellChecker">
  </bean>
 
</beans>

當(dāng)創(chuàng)建源代碼和bean配置文件完成后,讓我們運(yùn)行應(yīng)用程序。如果一切順利,這將打印以下信息:

?
1
2
Inside SpellChecker constructor.
Inside checkSpelling.

由構(gòu)造函數(shù)自動(dòng)裝配
這種模式是非常相似byType,但它應(yīng)用于構(gòu)造器參數(shù)。 Spring容器在外觀上autowire屬性被設(shè)置XML配置文件中bean的。然后,它嘗試匹配和連線它的構(gòu)造函數(shù)的參數(shù)與bean名稱的配置文件只有一個(gè)。如果找到匹配項(xiàng),它會(huì)注入這些bean,否則,它會(huì)拋出異常。

例如,如果一個(gè)bean定義設(shè)置為通過構(gòu)造配置文件自動(dòng)裝配,它具有與拼寫檢查類型的參數(shù)之一的構(gòu)造函數(shù),春天尋找一個(gè)bean定義namedSpellChecker,并用它來設(shè)置構(gòu)造函數(shù)的參數(shù)。仍然可以使用<constructor-arg>標(biāo)簽連線剩余的參數(shù)。下面的例子將說明這個(gè)概念。
這里是TextEditor.java文件的內(nèi)容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.yiibai;
 
public class TextEditor {
  private SpellChecker spellChecker;
  private String name;
 
  public TextEditor( SpellChecker spellChecker, String name ) {
   this.spellChecker = spellChecker;
   this.name = name;
  }
  public SpellChecker getSpellChecker() {
   return spellChecker;
  }
  public String getName() {
   return name;
  }
 
  public void spellCheck() {
   spellChecker.checkSpelling();
  }
}

下面是另外一個(gè)相關(guān)的類文件SpellChecker.java內(nèi)容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.yiibai;
 
public class SpellChecker {
  public SpellChecker(){
   System.out.println("Inside SpellChecker constructor." );
  }
 
  public void checkSpelling()
  {
   System.out.println("Inside checkSpelling." );
  }
  
}

以下是MainApp.java文件的內(nèi)容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.yiibai;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class MainApp {
  public static void main(String[] args) {
   ApplicationContext context =
       new ClassPathXmlApplicationContext("Beans.xml");
 
   TextEditor te = (TextEditor) context.getBean("textEditor");
 
   te.spellCheck();
  }
}

以下是在正常情況下的配置文件beans.xml文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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-3.0.xsd">
 
  <!-- Definition for textEditor bean -->
  <bean id="textEditor" class="com.yiibai.TextEditor">
   <constructor-arg ref="spellChecker" />
   <constructor-arg value="Generic Text Editor"/>
  </bean>
 
  <!-- Definition for spellChecker bean -->
  <bean id="spellChecker" class="com.yiibai.SpellChecker">
  </bean>
 
</beans>

但是,如果要使用由“構(gòu)造函數(shù)”自動(dòng)裝配,那么XML配置文件將如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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-3.0.xsd">
 
  <!-- Definition for textEditor bean -->
  <bean id="textEditor" class="com.yiibai.TextEditor"
   autowire="constructor">
   <constructor-arg value="Generic Text Editor"/>
  </bean>
 
  <!-- Definition for spellChecker bean -->
  <bean id="SpellChecker" class="com.yiibai.SpellChecker">
  </bean>
 
</beans>

創(chuàng)建源代碼和bean配置文件完成后,讓我們運(yùn)行應(yīng)用程序。如果一切順利,這將打印以下信息:

?
1
2
Inside SpellChecker constructor.
Inside checkSpelling.

除此之外,還有autodetect和默認(rèn)方式,這里就不再細(xì)講。
自動(dòng)裝配的局限性:
自動(dòng)裝配最好效果是它始終在一個(gè)項(xiàng)目中使用。如果自動(dòng)裝配不一般的使用,它可能會(huì)被混淆為開發(fā)人員可以使用它來連接只有一個(gè)或兩個(gè)bean定義。不過,自動(dòng)裝配可以顯著減少需要指定屬性或構(gòu)造器參數(shù),但你應(yīng)該使用它們之前考慮自動(dòng)裝配的局限性和缺點(diǎn)。

詳解Java的Spring框架下bean的自動(dòng)裝載方式

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲高清国产拍精品动图 | 惩罚美女妲己的尤老师 | 国产成人亚洲综合a∨婷婷 国产成人亚洲精品乱码在线观看 | 精品久久免费观看 | 国产欧美一区二区成人影院 | 精品网站 | 192.168.191| 欧美日韩中文字幕久久伊人 | 被巨大黑人的翻白眼 | www.男人的天堂 | chinese国产打屁股 | 农夫成人网 | 西施打开双腿下面好紧 | 国产伦精品一区二区 | 40岁女人三级全黄 | 黑人巨大vs北条麻妃在线 | 扒开大腿狠狠挺进视频 | 免费一区二区视频 | 亚洲 制服 欧美 中文字幕 | 白丝超短裙被输出娇喘不停小说 | 国产永久在线观看 | 福利视频免费 | 三上悠亚久久国产 | 四虎在线视频免费观看 | 亚洲成人在线播放 | 青青视频国产依人在线 | 九九影院午夜理论片无码 | 2020国产精品视频免费 | 石原莉奈被店长侵犯免费 | 99精品国产久热在线观看66 | 免费片在线观看高清 | 免费国产高清精品一区在线 | 日韩二三区 | 911香蕉视频 | 性关系视频网站 | 91视频国产一区 | 欧美a级在线观看 | sedog在线长片 | 无限资源在线观看8 | 亚洲毛片基地 | 白丝萝莉h |