堅持每天寫博文,積累下開發中的點點滴滴
- bean的作用域: bean對象可以存活多久的.
<bean id="" class="" scope="作用域"/>
singleton: 單例 ,在Spring IoC容器中僅存在一個Bean實例 (默認的scope)
prototype: 多例 ,每次從容器中調用Bean時,都返回一個新的實例,
request: 用於web開發,將Bean放入request範圍 ,request.setAttribute(“xxx”) , 在同一個request 獲得同一個Bean
session: 用於web開發,將Bean 放入Session範圍,在同一個Session 獲得同一個Bean
globalSession: 一般用於Porlet應用環境 , 分佈式系統存在全局session概念(單點登錄),如果不是porlet環境,globalSession 等同於Session
在開發中主要使用 scope=”singleton”、 scope=”prototype”.
對於MVC中的Action使用prototype類型,其他使用singleton
初始化和銷燬方法:
比如DataSource,SessionFactory最終都需要關閉資源:在Bean銷燬之前,都要調用close方法.
<bean id="someBean" class="......"
init-method="該類中初始化方法名" destroy-method="該類中銷燬方法名">
</bean>
init-method:bean生命週期初始化方法,對象創建後就進行調用
destroy-method:容器被銷燬的時候,如果bean被容器管理,會調用該方法。
如果bean的scope=”prototype”,那麼容器只負責創建和初始化,它並不會被spring容器管理銷燬。
- 不使用Spring測試:演示Spring容器非正常關閉:
單元測試的線程很短.(獲取網絡信息,不要使用單元測試,使用主方法)
如何正常的關閉Spring容器:
AbstractApplicationContext:
@Test
public void testLifeCycle2() throws Exception {
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(
"cn/itcast/cd/day1/lifecycle/LifeCycleTest-context.xml");
SomeBean bean = ctx.getBean("someBean", SomeBean.class);
System.out.println(bean);
//關閉上下文對象
//ctx.close();
//最好的方式:把Spring線程作爲JVM的子線程:Spring沒有運行完,JVM就不會終止.
ctx.registerShutdownHook();
}
GC:垃圾回收