- Bean元素:使用bean元素描述需要spring容器管理的对象
name属性:给被管理的对象起个名字,获得对象时根据该名称获得对象;
class属性:被管理对象的完整类名;
id属性:与name一样但是id不可重复,且不能使用特殊字符。
bean元素的scope属性
- singleton
singleton(默认值):单例对象,被标识为单例的对象在spring容器中只会存在一个实例,单例对象在容器创建时就会创建。
配置文件为:
1 <bean name="user2" 2 class="test.test.UserFactory" 3 factory-method="createUser" scope="singleton"></bean>
测试方法为 :
1 @org.junit.Test 2 public void fun2() throws Exception { 3 4 //1、创建容器对象,从类路径下去加载xml的配置文件 5 ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); 6 //想容器要对象 7 User u1=(User) ac.getBean("user2"); 8 User u2=(User) ac.getBean("user2"); 9 User u3=(User) ac.getBean("user2"); 10 System.out.println(u1==u3); 11 }
输出结果为true;
- prototype
多例原型,被标识为多例的对象,每次在获得对象时才会创建,并且每次创建时都是新的对象。同样是上面的测试方法,将bean的scope属性改为prototype之后,将会输出false.
singleton和prototype是重点,会经常使用。
在未来开发中,大多数情况下scope的属性配置取默认值即可,当sprig与struts2整合的时候,action要配置成prototype
- request
web环境下与request生命周期一致
- session
web环境下与session声明周期一致
Bean元素的生命周期属性
init-method:可以配置一个方法作为生命周期初始化方法,spring会在对象创建之后立即调用
destroy-method:也可以配置一个方法作为生命周期的销毁方法,spring容器在关闭并销毁所有容器中的对象之前调用
<bean name="user" class="entity.User" init-method="init" destroy-method="destroy"></bean>
实体类
1 package entity; 2 3 public class User { 4 private String name; 5 private Integer age; 6 7 @Override 8 public String toString() { 9 return "User{" + 10 "name='" + name + '\'' + 11 ", age=" + age + 12 '}'; 13 } 14 15 public String getName() { 16 return name; 17 } 18 19 public void setName(String name) { 20 this.name = name; 21 } 22 23 public Integer getAge() { 24 return age; 25 } 26 27 public void setAge(Integer age) { 28 this.age = age; 29 } 30 31 public void init(){ 32 System.out.println("初始化方法"); 33 } 34 public void destroy(){ 35 System.out.println("销毁方法"); 36 } 37 }
Spring的分模块配置
在一个配置文件引入其他配置文件
<import resource="其他配置文件src之后的路径">