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?- publicclass ValueTest {
- //定義一個String型屬性
- private String name;
-
//定義一個int型屬性
- privateint age;
- public String getName() {
- return name;
- }
- publicvoid setName(String name) {
- this.name = name;
- }
- publicint getAge() {
- return age;
- }
- publicvoid setAge(int age) {
- this.age = age;
-
}
- }
上面例項只是演示了注入普通屬性值。在Spring配置檔案中使用<value.../>元素來為這兩個屬性指定屬性值。
[html] view plain copy print?- <spanstyle="WHITE-SPACE: pre"></span><beanid="text"class="com.spring.service.impl.ValueTest">
- <propertyname="age"value="1"/>
- <propertyname="name"value="chenssy"/>
- </bean>
通過上面可以知道<value.../>元素主要用於傳入字串、基本型別的屬性值。
二、ref:配置合作者
<value.../>主要是配置基本型別的屬性值,但是如果我們需要為Bean設定屬性值是另一個Bean例項時,這個時候需要使用<ref.../>元素。使用<ref.../>元素可以指定如下兩個屬性。
bean:引用不在同一份XML配置檔案中的其他Bean例項的id屬性值。
local:引用同一份XML配置檔案中的其他Bean例項的id屬性值。
[html] view plain copy print?- <spanstyle="WHITE-SPACE: pre"></span><beanid="steelAxe"class="com.spring.service.impl.SteelAce"></bean>
- <beanid="chinese"class="com.spring.service.impl.Chinese">
- <propertyname="axe">
- <reflocal="steelAxe"/>
- </property>
- </bean>
其實Spring提供了一種更加簡潔的寫法:
[html] view plain copy print?- <beanid="steelAxe"class="com.spring.service.impl.SteelAce"></bean>
- <beanid="chinese"class="com.spring.service.impl.Chinese">
- <propertyname="axe"ref="steelAxe"/>
- </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?- <beanid="chinese"class="com.spring.service.impl.Chinese"autowire="byName"/>
- <beanid="gundog"class="com.spring.service.impl.Gundog">
- <propertyname="name"value="wangwang"/>
- </bean>
上面的配置檔案指定了byName規則。則com.app.service.impl.Chinese類中提供如下的依賴注入方法:
[java] view plain copy print?- <span style="WHITE-SPACE: pre"> </span>/*
- * 依賴關係必須的setter方法,因為需要通過名字自動裝配
- * 所以setter方法必須提供set+Bean名,Bean名的首字母大寫
- * @param dog 設定的dog值
- */
- publicvoid setGundog(Dog dog){
- this.dog = dog;
- }
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>**/*.