spring框架beans.xml中的標籤

spring框架beans.xml中的標籤

一、beans.xml的名稱和位置

在使用spring框架時,首先要從配置文件入手,不然即使會用全註解方式,也很難會完全理解。而配置文件的名稱和位置都沒有硬性規定,但在開發中經常按照如下說明進行配置。

1.配置文件的名稱

配置文件沒有固定的名稱,但在開發中,爲了表明配置文件的意義,通常叫做:beans.xml或者applicationContext.xml,我的習慣是叫做beans.xml。其意義在於:該文件配置了創建對象(bean)的信息。

2.beans.xml的文件位置

beans.xml的文件位置也不是硬性規定,但通常都是放在如下位置:
在ecplipes環境中,放在src目錄下;
在idea環境中,放在resource目錄下。(該目錄編譯後會在classpath下)

二、beans.xml配置文件中的標籤

beans.xml中的標籤,我給分爲3類:
第一種:創建對象的標籤。
第二種:傳入參數的標籤。
第三種:其他功能的標籤。

1.創建對象的標籤

<bean>標籤:用於向spring容器中傳遞需要創建對象的信息。
屬性:
id:給當前bean起的名字,用來在容器中唯一確定這個bean。
class:用於綁定創建對象的全限定類名。
scope:用於指定bean對象的作用範圍。(默認爲單例singleton)
示例:

<bean id="userService" class="com.itjj.service.UserService" scope="singleton"></bean>

更詳細的bean標籤用法,請看我的另一篇文章:Spring 框架中bean管理細節

2.給bean傳入參數的標籤

(1)<constructor-arg>標籤:用於向使用構造函數傳參的bean中傳入參數。
屬性:
name:通過參數的屬性名注入。
type:和name作用類似,只不過是根據類型注入。(我不太用,因爲可能會有兩個同類型參數時,會出問題)
index:通過參數列表的索引注入。(我也不用,因爲還要記每個對象的索引,比較麻煩)
— 以上3個屬性用於指定給構造函數中的哪個參數賦值 —
value:用於注入基本數據類型或String類型。
ref:用於注入其他的註冊了bean的數據類型(對象類型),值爲傳入bean的id值。

示例:(我只展示通過name屬性注入,通過value和ref屬性賦值)
UserService類的信息

//需要注入的屬性
int id;
String username;
UserDao userdao;
//UserService類中的構造器
public UserService(int id,String username,UserDao userDao){
  this.id=id;
  this.name=name;
  this.userDao = userDao;
}

beans.xml中userService的bean配置

<!-- userService 通過構造器注入屬性-->
<bean id="userService" class="com.itjj.service.UserService">
	<constructor-arg name="id" value="1"></constructor-arg>
	<constructor-arg name="username" value="小張"></constructor-arg>
	<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
<!-- 被userService注入的bean -->
<bean id="userDao" class="com.itjj.service.UserDao"></bean>

(2)<property>標籤:用於向使用set方法傳參的bean中傳入參數。
屬性:
name:用於指定注入時的set方法名稱。(set方法去掉set,然後首字母小寫)
value:用於注入基本數據類型或String類型。
ref:用於注入其他的註冊了bean的數據類型(對象類型),值爲傳入bean的id值。

示例:
UserService類的信息

//需要注入的屬性
int id;
String username;
UserDao userDao;
//UserService類中的set方法
public void setId(int id){
	this.id=id;
}
public void setUsername(String username){
	this.username=username;
}
public void setUserDao(UserDao userDao){
	this.userDao=userDao;
}

beans.xml中userService的bean配置

<!-- userService 通過構造器注入屬性-->
<bean id="userService" class="com.itjj.service.UserService">
	<property name="id" value="11"></property>
	<property name="name" value="小張"></property>
	<property name="userDao" ref="userDao"></property>
</bean>
<!-- 被userService注入的bean -->
<bean id="userDao" class="com.itjj.service.UserDao"></bean>

(3)複雜類型注入
用於給list結構(數組,List,Set類型)的屬性注入的標籤:
<list><array><set><map>
用於給map結構的屬性注入的標籤:
<map>,<props>
如上:結構相同時,標籤可以互換

示例:(只演示list於map標籤)
UserService類中的信息:

List<String> friList;
Map<String,String> friMap;
//set方法
public void setFriList(List<String> friList){
	this.friList=friList;
}
public void setFriMap(Map<String,String> friMap){
	this.friMap=friMap;
}

beans.xml中的信息

<bean id="userService" class="com.itjj.service.UserService">
	<property name="friList">
		<List>
			<value>小明</value>
			<value>小紅</value>
			<value>小芳</value>
		</list>
	</property>
	<property name="friMap">
		<map>
			<!-- map注入的第一種方法:value屬性 -->
			<entry key="friend1" value="小明"></entry>
			<entry key="friend2" value="小紅"></entry>
			<!-- map注入的第二種方法:value標籤 -->
			<entry key="friend3">
					<value>小芳</value>
			</entry>
		</map>
	</property>
</bean>

3.其他功能的標籤

(1)<context:component-scan>標籤:用於註解注入時,開啓註解掃描功能。
屬性:base-package:用於指定註解掃描的包及子包。
示例:

<!-- 第一種 對所有包進行掃描-->
<context:component-scan/>
<!-- 第二種 對指定包及子包進行掃描-->
<context:component-scan base-package="com.itjj.dao" />

(2)<import>標籤:用於引入另一個beans配置文件。
如果在註冊bean時,想要分模塊註冊,就可以使用<import>標籤,原理是加載配置文件時,先把import的文件整合到主配置文件,在進行解析生成容器。
屬性:resource屬性用於指定被引入的配置文件。
示例:

<import resource="classpath:daoBeans.xml" />
<import resource="classpath:serviceBeans.xml" />
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章