小程序原生组件—提升你的小程序体验
546
2023-08-01
Spring如何在xml文件中配置Bean
Spring容器是一个大工厂,负责创建、管理所有的Bean。
Spring容器支持2种格式的配置文件:xml文件、properties文件,最常用的是xml文件。
Bean在xml文件中的配置
根元素,可包含多个
一个
name指定对象的名称,class指定该Bean的类,scope指定该对象的作用域。class属性是必须的,其它可选。
对象的名称可通过name或id指定,id只能指定一个名称,name可指定一个或多个名称,用逗号或分号隔开即可。示例:name="grade,score"。未指定id或name时,默认取class属性的值。
Bean的作用域
作用域
说明
http://
singleton(单例)
该Bean(类)在Spring容器中只有一个实例,无论引用/获取这个Bean多少次,都指向同一个对象。 singleton是Bean的默认作用域,适用于无会话状态的Bean(如Dao组建、Service组件)。
prototype(原型)
每次获取该Bean时,都会创建一个新的实例。
request
在一次HTTP请求中,获取的是该Bean的同一个实例,该实例只在此次HTTP请求中有效。 对于不同的HTTP请求,会创建不同的实例。
session
在一次HTTP session中获取的是该Bean的同一个实例,该实例只在本次HTTP session中有效。
globalSession
在一个全局的HTTP session中,获取到的是该Bean的同一个实例。 只在使用portlet上下文时有效。
application
为每个ServletContext对象创建一个实例。 只在web相关的ApplicationContext中有效。
websocket
为每个websocket对象创建一个实例。 只在web相关的ApplicationContext中有效。
示例:singleton作用域
ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取到的这两个对象是同一个对象。
Student student1=applicationContext.getBean("student",Student.class);
Student student2=applicationContext.getBean("student",Student.class);
//输出相同
System.out.println(student1);
System.out.println(student2);
缺省scope属性时,默认就是singleton作用域。
示例:prototype作用域
ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
//获取到的这两个对象是不同的。调用getBean()一次,就创建一个新的对象。
Student student1=applicationContext.getBean("student",Student.class);
Student student2=applicationContext.getBean("student",Student.class);
//输出不同
System.out.println(student1);
System.out.println(student2);
说明:
在xml配置文件中,一个
在调用getBean()时获取/引用容器中Bean实例时,Spring容器根据id/name找到这个Bean对应的配置,查看作用域,该重新新建这个Bean的实例就重新新建,该返回已存在的实例就返回已存在的实例。
name或index指定形参,name是用形参名指定,index是用形参列表的下标指定(从0开始)。缺省时,默认从第一个参数开始,依次传值。
value或ref指定实参值,value只能指定基础类型(Spring容器会自动转换为对应的数据类型),ref只能指定为其它的Bean(指定为其它Bean的name或id),根据需要选用。也可以用
可以写成这种形式:
依然是一个
参数可以是数组类型
<array>
参数可以是List、Map、Set类型
private List
public Student(List
this.list=list;
}
一个
的效果一样,使用哪个都行。
Set:用法和List一样。
Map:
一个
说明:
因为元素对应得数据类型是List,
和
如果参数是基础数据类型或是其它的Bean,可以写成
给setter方法传递参数,一个setter方法设置一个属性,一个
如果Bean有多个setter方法,可使用多个
name指定形参名。value指定值(只能为Java基础类型),或者用ref指定其它Bean。当然也可以用对应的子元素。
同
注意:
和
因为
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~