有一個疑問:@Scope的變化導致控制臺輸出的變化,這說明了什么?(單元測試方法始終沒變,最后一張圖)
最后一張圖是單元測試方法,始終沒變。改變的是@Scope的屬性值,隨之改變的是控制臺輸出的結(jié)果,請問為什么把作用域變成prototype,控制臺就沒有bean的銷毀信息了?為什么加了代理,初始化信息和銷毀信息都不見了?
跪求大神,大牛幫忙說一下。
最后一張圖是單元測試方法,始終沒變。改變的是@Scope的屬性值,隨之改變的是控制臺輸出的結(jié)果,請問為什么把作用域變成prototype,控制臺就沒有bean的銷毀信息了?為什么加了代理,初始化信息和銷毀信息都不見了?
跪求大神,大牛幫忙說一下。
2016-05-07
舉報
2016-05-08
prototype 作用域和singleton不一樣,prototype不會自動銷毀對象,同一個容器中每次請求都會創(chuàng)建新的對象。你在prototype的注解的時候,在手動關閉容器。即可輸出。 加一句 ctx.registerShutdownHook(); 即可手動關閉容器銷毀對象,這樣就能執(zhí)行到destroy的方法
2016-05-11
首先,關于對象回收機制,Java有自己的一套算法。一般是當對象不被使用(手動關閉,或者超過一段時間未使用。因為Java回收機制會以一個時間段掃描)就自動回收;另外,單例和靜態(tài)在某種程度上是一樣的。spring容器可以創(chuàng)建多個,一個容器里面又可以生成多個對象,如果你理解為靜態(tài),那么同一個容器的對象是一樣的。但是不同容器之間的對象就不一樣了(內(nèi)存地址不一樣),所以你這么理解也可以,那么就是靜態(tài)類部類那種形式了。但是單例最主要的是的作用是線程安全!你可以看看單例模式的Java代碼
2016-05-08
另外我有我自己的理解:我覺得scope=prototype的時候,創(chuàng)建的對象不會隨著容器的關閉而被銷毀,這些對象是垃圾回收器隨機銷毀的吧?另外我把單例理解為static的,是和容器生死相隨的。即容器被創(chuàng)建就有單例,容器關閉,單例就被銷毀。我的理解不知道對不對?