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