《spring揭秘》读书笔记三
?bean的scope
? 1. singleton, scope默認值為singleton
?spring容器中 scope='singleton'與單例模式不是一個意思。標記為singleton的bean是由容器來保證這種類型的bean在同一個容器中只存在一個共享實例;而Singleton模式則是保證在同一個Classloader中只存在一個這種類型的實例。
??可以從兩個方面來看待singleton的bean所具有的特性。
? ? ?1). 對象實例數量。 singleton類型的bean定義,在一個容器中只存在一個共享實例,所有對該類型bean的依賴都引用這一單一實例。
? ? 2).?對象存活時間。 singleton類型bean定義, 從容器啟動,到它第一次被請求而實例化開始,只要容器不銷毀或者退出,該類型bean的單一實例就會一直存活。
2.?prototype
? ?針對聲明為擁有prototype scope的bean定義,容器在接到該類型對象的請求的時候,會每次都重新生成一個新的對象實例給請求方。 容器每次返回給請求方一個新的對象實例之后,容器就不再擁有當前返回對象的引用,就任由這個對象實例“自生自滅”了。
? 對于那些請求方不能共享使用的對象類型,應該將其bean定義的scope設置為prototype。這樣,每個請求方可以得到自己對應的一個對象實例。通常,聲明prototype的scope的bean定義類型,都是一些有狀態的,比如保存每個顧客信息的對象。
? ?
3. factorybean
? ?FactoryBean是Spring容器提供的一種可以擴展容器對象實例化邏輯的接口,請不要將其與容器名稱BeanFactory相混淆。FactoryBean,其主語是Bean,定語為Factory,也就是說,它本身與其他注冊到容器的對象一樣,只是一個Bean而已,只不過,這種類型的Bean本身就是生產對象的工廠(Factory)。
4. 方法注入
? ?被注入的方法必須滿足如下定義:
? ? ?<public|protected> [abstract] <return-type> theMethodName(no-arguments);?
<bean id="newsBean" class="..domain.FXNewsBean" scope="prototype"> </bean><bean id="mockPersister" class="..impl.MockNewsPersister"><lookup-method name="getNewsBean" bean="newsBean"/> </bean>??通過<lookup-method>的name屬性指定需要注入的方法名, ?bean屬性指定需要注入的對象,當getNewsBean方法被調用的時候,容器可以每次返回一個新的FXNewsBean類型的實例。
? 5. 方法替換
? ? ?與方法注入只是通過相應方法為主體對象注入依賴對象不同,方法替換更多體現在方法的實現層面上,它可以靈活替換或者說以新的方法實現覆蓋掉原來某個方法的實現邏輯。基本上可以認為,方法替換可以幫助我們實現簡單的方法攔截功能。基本做到AOP(面向切面編程)的功能了。
? ? 方法替換需要我們提供的類實現org.springframework.beans.factory.support.MethodReplacer接口
public class FXNewsProviderMethodReplacer implements MethodReplacer {private static final transient Log logger = LogFactory.getLog(FXNewsProviderMethodReplacer.class);public Object reimplement(Object target, Method method, Object[] args) throws Throwable {logger.info("before executing method["+method.getName()+"] on Object["+target.getClass().getName()+"].");System.out.println("sorry,We will do nothing this time.");logger.info("end of executing method["+method.getName()+"] on Object["+target.getClass().getName()+"].");return null;} } <bean id="djNewsProvider" class="..FXNewsProvider"><constructor-arg index="0"><ref bean="djNewsListener"/></constructor-arg><constructor-arg index="1"><ref bean="djNewsPersister"/></constructor-arg><!-- 方法替換 --><replaced-method name="getAndPersistNews" replacer="providerReplacer"></replaced-method> </bean><bean id="providerReplacer" class="..FXNewsProviderMethodReplacer"> </bean><!--其他bean配置--> ...?
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的《spring揭秘》读书笔记三的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《spring揭秘》读书笔记二
- 下一篇: mac终端下修改MySQL的编码格式以解