Bean的scope属性
在Spring容器中的对象,默认是单例的.如dao,service.单例可以提高性能
但是也需要每次获取都要new一次Bean对象.如Struts2的 Action对象,每次页面请求,都需要一个性的Action对象.
解决方法:设置bean标签中的scope属性来设置bean的生命范围.
- singleton:单例.默认的,这个应用只有就一个对象
- prototype:原型模式,每次都会new一个新的对象,属于延迟加载,Spring容器启动不会创建该bean对象,Struts2的Action类使用该值
- request:1次请求就是一个新的Bean.使用于SpringMVC
- session:一次会话就是一个新的Bean,使用于SpringMVC
<bean id="employeeAction" class="全限名" scope="prototype"/>
Bean的初始化和销毁方法
- 的初始化和销毁方法都是Bean对象的类中声明的方法,
- init-method:初始化在Spring容器生成其对象时候调用.(高级查询对象就有需要初始化的方法)
- destroy-method:销毁方法在Spring容器关闭前调用.
User类
public class User {
public void init() {
System.out.println("创建对象");
}
public void dowork() {
System.out.println("使用对象");
}
public void destory() {
System.out.println("销毁对象");
}
}
applicationContext.xml声明bean
<bean id="user" class="dao.impl.User" destroy-method="destory" init-method="init"/>
Spring的测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext.xml")
public class MyTest {
@Autowired
private User user;
@Test
public void dowork() {
user.dowork();//创建对象--使用对象---销毁对象
}
}
普通的测试
1.用ClassPathXmlApplicationContext 接收,ApplicationContext是接口,没有关容器的方法.
2.最后需要容器.close();
public class MyTest {
@Test
public void dowork() throws InterruptedException {
//启动容器 创建对象
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("/applicationContext.xml");
Thread.sleep(2000);
User user = (User) ctx.getBean("user");
user.dowork();//2秒后使用对象
Thread.sleep(2000);
ctx.close();//2秒后关闭容器 销毁对象
}
}