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