Spring第三篇:xml中bean的定义
spring根据bean xml⽂件创建和管理对象,spring的容器创建好这些对象之后,我们如何获取和使⽤这些对象?我们需要根据在xml⽂件中定义的bean对象的名称标识,进⾏查。常见的bean对象定义格式如下:
beans是根元素,可以包含任意数量的import、bean和alias
常见bean的定义标签如下:
<import resource="classpath:/spring01/l"/>
resource: 引⼊的其他bean定义⽂件
<bean id="helloSpring" class="com.java.spring01.demo1.HelloSpring"/>
id:bean标识
class:bean所属的全路径类名称
<alias name="helloSpring" alias="hello"/>
name:bean标识
alias:bean别名
bean标签
<bean id="bean唯⼀标识" name="bean名称" class="完整类型名称" factory-bean="⼯⼚bean名称" factory-method="⼯⼚⽅法"/>
bean名称:每个bean都有⼀个名称,叫做bean名称,bean名称在⼀个spring容器中必须唯⼀,否则会报错,通过bean名称可以从spring容器获取对应的bean对象。
bean别名:bean对象的外号,在spring中叫做bean的别名,spring容器允许使⽤者通过名称或者别名获取对应的bean对象。
bean名称和别名的定义⽣效规则
名称和别名可以通过bean元素中的id和name来定义,具体定义规则如下:
1、当id存在的时候,不管name有没有,取id为bean的名称
2、当id不存在,此时需要看name,name的值可以通过,;或者空格分割,最后会按照分隔符得到⼀个String数组,数组的第⼀个元素作为bean的名称,其他的作为bean的别名
3、当id和name都存在的时候,id为bean名称,name⽤来定义多个别名
4、当id和name都不指定的时候,bean名称⾃动⽣成,⽣成规则下⾯详细说明
测试案例,创建好UserModel对象,并在l⽂件中定义好bean的配置元数据信息
<bean id="user1" class="com.java.spring01.demo2.UserModel"/>
<bean name="user2" class="com.java.spring01.demo2.UserModel"/>
<bean id="user3" name="user3_1" class="com.java.spring01.demo2.UserModel"/>
<bean id="user4" name="user4_1,user4_2,user4_3" class="com.java.spring01.demo2.UserModel"/>
<bean name="user5,user5_1,user5_2,user5_3" class="com.java.spring01.demo2.UserModel"/>
test⽅法
@Test
public void tetsUser(){
//1、配置l⽂件
String beanXml = "classpath:/spring01/l";
//2、根据xml配置⽂件获取spring的对象管理容器
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(beanXml);
//3、在容器⾥⾯获取所有的对象,并打印出别名
// String[] beanDefinitionNames = BeanDefinitionNames();
for(String beanName : BeanDefinitionNames()){
String[] aliases = Aliases(beanName);//获取对象的别名,数组表⽰允许有多个
System.out.println(String.format("beanName:%s, 别名:{%s}", beanName, String.join(",",aliases)));
}
}
运⾏结果:
beanName:user1, 别名:{}
beanName:user2, 别名:{}
beanName:user3, 别名:{user3_1}
beanName:user4, 别名:{user4_1,user4_2,user4_3}
beanName:user5, 别名:{user5_3,user5_1,user5_2}
bean元素的id和name都未指定的时候,spring会使⽤完整类型加上编号⽣成bean名称,多个同⼀类型的bean未指定别名的话,只有第⼀个bean会使⽤完整类名⾃动⽣成别名。
案例:按l⽂件中增加配置元数据信息spring怎么读取xml文件
<!--未指定id和name的时候,会⾃动⽣成名称和别名,同⼀个类多个bean未指定id和name-->
<bean class="com.java.spring01.demo2.UserModel"/>
<bean class="com.java.spring01.demo2.UserModel"/>
<bean class="java.lang.String"/>
<bean class="java.lang.String"/>
test⽅法,运⾏结果:
beanName:com.java.spring01.demo2.UserModel#0, 别名:{com.java.spring01.demo2.UserModel}
beanName:com.java.spring01.demo2.UserModel#1, 别名:{}
beanName:java.lang.String#0, 别名:{java.lang.String}
beanName:java.lang.String#1, 别名:{}
import元素:
当我们的系统⽐较⼤的时候,会分成很多模块,每个模块会对应⼀个bean xml⽂件,我们可以在⼀个总的bean xml中对其他bean xml进⾏汇总,相当于把多个bean xml的内容合并到⼀个⾥⾯了,可以通过import元素引⼊其他bean配置⽂件。
案例:在l⽂件中增加import引⼊demo1的l⽂件
<import resource="classpath:/spring01/l"/>
test⽅法,运⾏结果:
beanName:helloSpring, 别名:{}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论