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" />