1. 程式人生 > >Spring在xml檔案中配置bean

Spring在xml檔案中配置bean

最近在專案中學習spring的xml配置檔案,發現其中的bean是主要部分,而且似乎形式多變,有必要全面瞭解一下,這篇文章總結的比較全面。

-----------分割線-------------

       Java例項的屬性值可以有很多種資料型別、基本型別值、字串型別、java例項甚至其他的Bean例項、java集合、陣列等。所以Spring允許通過如下幾個元素為Bean例項的屬性指定值:

          value

          ref

          bean

          list、set、map、props

一、value:設定普通屬性值

          <value.../>元素用於指定字串型別、基本型別的屬性值。Spring使用XML解析器來解析出這些資料,然後利用java.beans.PropertyEdior完成型別轉換:從java.lang.String型別轉換為所需的引數值型別。如果目標型別是基本資料型別,通常都是可以正確轉換。

[java] view plain copy  print?
  1. publicclass ValueTest {  
  2.     //定義一個String型屬性
  3.     private String name;  
  4.     //定義一個int型屬性
  5.     privateint age;  
  6.     public String getName() {  
  7.         return name;  
  8.     }  
  9.     publicvoid setName(String name) {  
  10.         this.name = name;  
  11.     }  
  12.     publicint getAge() {  
  13.         return age;  
  14.     }  
  15.     publicvoid setAge(int age) {  
  16.         this.age = age;  
  17.     }  
  18. }  

          上面例項只是演示了注入普通屬性值。在Spring配置檔案中使用<value.../>元素來為這兩個屬性指定屬性值。

[html] view plain copy  print?
  1. <spanstyle="WHITE-SPACE: pre"></span><beanid="text"class="com.spring.service.impl.ValueTest">
  2.         <propertyname="age"value="1"/>
  3.         <propertyname="name"value="chenssy"/>
  4.     </bean>

          通過上面可以知道<value.../>元素主要用於傳入字串、基本型別的屬性值。

二、ref:配置合作者

          <value.../>主要是配置基本型別的屬性值,但是如果我們需要為Bean設定屬性值是另一個Bean例項時,這個時候需要使用<ref.../>元素。使用<ref.../>元素可以指定如下兩個屬性。

          bean:引用不在同一份XML配置檔案中的其他Bean例項的id屬性值。

          local:引用同一份XML配置檔案中的其他Bean例項的id屬性值。

[html] view plain copy  print?
  1. <spanstyle="WHITE-SPACE: pre"></span><beanid="steelAxe"class="com.spring.service.impl.SteelAce"></bean>
  2.     <beanid="chinese"class="com.spring.service.impl.Chinese">
  3.         <propertyname="axe">
  4.             <reflocal="steelAxe"/>
  5.         </property>
  6.     </bean>

          其實Spring提供了一種更加簡潔的寫法:

[html] view plain copy  print?
  1. <beanid="steelAxe"class="com.spring.service.impl.SteelAce"></bean>
  2. <beanid="chinese"class="com.spring.service.impl.Chinese">
  3.     <propertyname="axe"ref="steelAxe"/>
  4. </bean>

          通過property增加ref屬性,一樣可以將另一個Bean的引用設定成axe屬性值。這樣寫的效果和使用<ref.../>屬性一樣,而且不需要區分是使用bean屬性還是local屬性,所以推薦這種寫法。

          2.1、使用自動裝配注入合作者bean

          Spring支援自動裝配Bean與Bean之間的依賴關係,也就是說我們無需顯示的指定依賴Bean。由BeanFactory檢查XML配置檔案內容,根據某種規則,為主調Bean注入依賴關係。

Spring的自動裝配機制可以通過<bean.../>元素的default-autowire屬性指定,也可以通過<bean.../>元素的autowire屬性指定。

          自動裝配可以減少配置檔案的工作量,但是它降低了依賴關係的透明性和清晰性,所以一般來說在較大部署環境中不推薦使用,顯示配置合作者能夠得到更加清晰的依賴關係。Spring提供瞭如下幾種規則來實現自動裝配。

          no:不適用自動裝配。Bean依賴必須通過ref元素定義。

          byName:根據屬性名自動裝配。BeanFactory查詢容器中的全部Bean,找出其中id屬性與屬性同名的Bean來完成注入。如果沒有找到匹配的Bean例項,則Spring不會進行任何注入。

          byType:根據屬性型別自動裝配。BeanFactory查詢容器中的全部Bean,如果正好有一個與依賴屬性型別相同的Bean,就自動注入這個屬性;但是如果有多個這樣的Bean,就會丟擲一個異常。如果沒有匹配的Bean,則什麼都不會發生,屬性就不會被設定。如果需要無法自動裝配時丟擲異常,則設定dependency-check=”objects”。

          constructor:與不Type類似,區別是用於構造注入的引數。

          Autodetect:BeanFactory根據Bean內部結構,決定使用constructor或者byType。如果找到一個預設的建構函式,則使用byTe。

          byName規則

          byTyep規則是指通過名字注入依賴關係,假如Bean A的實現類裡面包含setB()方法,而Spring的配置檔案恰好包含一個id為b的Bean,則Spring容器就會將b例項注入Bean A中。如果容器中沒有名字匹配的Bean,Spring則不會做任何事情。

[html] view plain copy  print?
  1. <beanid="chinese"class="com.spring.service.impl.Chinese"autowire="byName"/>
  2. <beanid="gundog"class="com.spring.service.impl.Gundog">
  3.     <propertyname="name"value="wangwang"/>
  4. </bean>

          上面的配置檔案指定了byName規則。則com.app.service.impl.Chinese類中提供如下的依賴注入方法:

[java] view plain copy  print?
  1. <span style="WHITE-SPACE: pre"> </span>/* 
  2.      * 依賴關係必須的setter方法,因為需要通過名字自動裝配 
  3.      * 所以setter方法必須提供set+Bean名,Bean名的首字母大寫 
  4.      * @param dog 設定的dog值 
  5.      */
  6.     publicvoid setGundog(Dog dog){  
  7.         this.dog = dog;  
  8.     }  

          byType規則

          byType規則是根據型別匹配注入依賴關係。假如A例項有setB(B b)方法,而Spring配置檔案中恰好有一個型別B的Bean例項,容器為A注入型別匹配的Bean例項。如果容器中存在多個B的例項,則會丟擲異常,如果沒有B例項,則不會發生任何事情。

[html] 

相關推薦

Spring基礎——在Spring Config 檔案配置 Bean

一、基於 XML 的 Bean 的配置——通過全類名(反射) <bean <!-- id: bean 的名稱在IOC容器內必須是唯一的若沒有指定,則自動的將全限定類名作為 改 bean 的名稱-->id="hello" <!-- 通過全類名的方式來配置 bean

Spring在xml檔案配置bean

最近在專案中學習spring的xml配置檔案,發現其中的bean是主要部分,而且似乎形式多變,有必要全面瞭解一下,這篇文章總結的比較全面。 -----------分割線-------------        Java例項的屬性值可以有很多種資料型別、基本型別值、

classpath 和 classpath* 區別以及如何覆蓋在配置檔案Bean ID

寫spring的程式碼到現在,一直都很習慣性的拷貝web.xml中的內容,沒怎麼在意裡面的內容,最近認真研究了下,很多東西都不是很理解,特別是classpath和classpath*的區別,研究了許久才搞明白,記錄下備忘。 classpath 和 classpath* 區別: classpath:只會到你

Spring配置檔案配置資料庫連線(mysql,sqlserver,oracle)

xml配置檔案中配置如下: <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"

Maven專案oracle資料庫連線不上(已經在pom檔案配置jdbc驅動檔案

在Maven專案中配置資料庫連線的過程中,出現java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver: 但是檢查了很久都沒有發現哪裡出現錯誤,該配置的都配置了,然後在百度找了一下,發現是oracle版本不同造成的: 參

Spring配置檔案配置property標籤的name和ref的區別:

在看李剛的《Java EE企業實戰》,裡面有一個關於Spring的配置的 <bean id=“person” class=“service.Person”> <!-- 控制器呼叫setAxe方法,將容器中的axe bean作為傳入的引數 --> <!–此處的na

Spring Boot Cache + redis 設定有效時間和自動重新整理快取,時間支援在配置檔案配置

分享一下我老師大神的人工智慧教程吧。零基礎,通俗易懂!風趣幽默!http://www.captainbed.net/ 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Spring在xml檔案裡面配置Bean的自動裝配

Spring的xml檔案中在<bean>裡面定義autowire屬性可以完成自動裝配Bean     <bean id="admin" class="com.yuan.Admin" autowire="byName" /> 關於自動裝配有五種

配置檔案配置事務的標準規範

程式碼如下 <!-- 配置事務 --> <tx:annotation-driven/> <!-- 配置事物管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource

Spring Boot快取實戰 Redis 設定有效時間和自動重新整理快取,時間支援在配置檔案配置

問題描述 Spring Cache提供的@Cacheable註解不支援配置過期時間,還有快取的自動重新整理。 我們可以通過配置CacheManneg來配置預設的過期時間和針對每個快取容器(value)單獨配置過期時間,但是總是感覺不太靈活。下面是一個示例: @Bean

web.xml檔案配置和的區別

web工程大多都需要配置web.xml檔案,web.xml檔案主要用來配置Listener、Filter、Servlet等。web.xml檔案包括xml檔案頭,DOCTYPE宣告,web-app元素。 web.xml的載入過程(引用) 在web-app元素內,元素的配置順

Spring配置檔案配置事物

"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/contex

Maven配置檔案配置指定JDK版本

1. 在setting.xml檔案中的<profiles>標籤加入如下配置:<profile> <id>jdk-1.8</id>

IDEA pom檔案配置Tomcat和jetty外掛

1.配置Tomcat    在pom檔案中的<build><plugins>中配置:<build>     <plugins>         <plugin> <groupId>

在tomcat的web.xml檔案配置error-page

指定處理錯誤的頁面 現在我瞭解到,你在開發servlet和JSP頁面時從不會犯錯誤,而且你的所有頁面是那樣的清晰,一般的程式設計師都不會被它們的搞糊塗。但是,是人總會犯錯誤的,使用者可能會提供不合規定的引數,使用不正確的URL或者不能提供必需的表單欄位值。除此之外,其它開發人

使用sed修改配置檔案配置項的值

大致思路如下:     sed修改某一個檔案的配置項的值         1.找到行號 ,比如得到的行號是9                    sed -n '/aaa/=' config.ini         2.刪除這一行,再新增你想加的內容,          

web.xml檔案配置(servlet, spring, filter, listenr)的載入順序 研究

發現引起bug的原因是web.xml的下面幾行:    <filter-mapping>        <filter-name>SecurityFilter</filter-name>        <url-pattern>*.do</url-patt

spring檔案配置aop時需要新增的標頭檔案

<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/

Spring進階之路(8)-java程式碼與配置檔案配置

實際開發中並不會需要你將程式碼轉為配置檔案的形式去呈現,但是,我寫著一系列博文的目的並不是教你如何去專案中進行開發,因為包括之前的幾篇博文中你會發現並不是在講專案的實踐的,我的想法是這樣的:為一些對Spring有所瞭解但是並不深入的朋友拓寬知識面,讓你不僅僅會用Spring

遇到xml檔案不編譯,需要在pom.xml檔案配置

<build><resources><resource><directory>src/main/java</directory>需要編譯的路徑<includes><include>**/*.