1. 程式人生 > >【Spring】【Bean的scope屬性】【Bean的初始化和銷燬方法】

【Spring】【Bean的scope屬性】【Bean的初始化和銷燬方法】

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的初始化和銷燬方法

  1. 的初始化和銷燬方法都是Bean物件的類中宣告的方法,
  2. init-method:初始化在Spring容器生成其物件時候呼叫.(高階查詢物件就有需要初始化的方法)
  3. 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秒後關閉容器 銷燬物件
    }
}