【Spring】【Bean的scope屬性】【Bean的初始化和銷燬方法】
阿新 • • 發佈:2019-02-19
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秒後關閉容器 銷燬物件
}
}