spring 用到的九種設計模式
1.簡單工廠模式
又叫做靜態工廠模式
簡單工廠模式實質是有一個工廠類根據傳入的引數,動態決定應該建立哪一個產品類。
<beans> <bean id="singletonBean" class="com.itxxz.HelloItxxz"> <constructor-arg> <value>Hello! 這是singletonBean!value> </constructor-arg> </ bean> <bean id="itxxzBean通常由應用程式直接使用new建立新的想,為了將物件的建立和使用相分離,採用工廠模式,即應用程式將物件的建立及初始化職責交給工廠物件。
一般情況下,應用程式有自己的工廠物件來建立bean。如果將應用程式自己的工廠物件交給spring管理,那麼spring管理的就是普通的bean,而是工廠bean
//呼叫getBean()時,返回隨機數.如果沒有指定factory-method,會返回StaticFactoryBean的例項,即返回工廠Bean的例項 XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml")); System.out.println("我是IT學習者建立的例項:"+factory.getBean("random").toString()); } 3.單例模式
保證一個類中只有一個例項,並提供一個訪問它的全域性訪問點。
4.介面卡
在spring的Aop中,使用的Advice來增強被代理類的功能。spring實現這一Aop功能的原理就使用代理模式(1.jdk動態代理 2.cglib位元組碼生成技術代理)對類進行方法級別的切面增強,
public interface AdvisorAdapter { boolean supportsAdvice(Advice advice); MethodInterceptor getInterceptor(Advisor advisor); } MethodBeforeAdviceAdapter類,Adapter class MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable { public boolean supportsAdvice(Advice advice) { return (advice instanceof MethodBeforeAdvice); } public MethodInterceptor getInterceptor(Advisor advisor) { MethodBeforeAdvice advice = (MethodBeforeAdvice) advisor.getAdvice(); return new MethodBeforeAdviceInterceptor(advice); } }5.包裝器
在我們的專案中遇到這樣一個問題:我們的專案需要連線多個數據庫,而且不同的客戶在每次訪問中根據需要會去訪問不同的資料庫。我們以往在spring和hibernate框架中總是配置一個數據源,因而sessionFactory的dataSource屬性總是指向這個資料來源並且恆定不變,所有DAO在使用sessionFactory的時候都是通過這個資料來源訪問資料庫。但是現在,由於專案的需要,我們的DAO在訪問sessionFactory的時候都不得不在多個數據源中不斷切換,問題就出現了:如何讓sessionFactory在執行資料持久化的時候,根據客戶的需求能夠動態切換不同的資料來源?我們能不能在spring的框架下通過少量修改得到解決?是否有什麼設計模式可以利用呢?
首先想到在spring的applicationContext中配置所有的dataSource。這些dataSource可能是各種不同型別的,比如不同的資料庫:Oracle、SQL Server、MySQL等,也可能是不同的資料來源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。然後sessionFactory根據客戶的每次請求,將dataSource屬性設定成不同的資料來源,以到達切換資料來源的目的。
spring中用到的包裝器模式在類名上有兩種表現:一種是類名中含有Wrapper,另一種是類名中含有Decorator。基本上都是動態地給一個物件新增一些額外的職責。
6.代理
為其他物件提供一種以控制對這個物件的訪問
7.觀察者
定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件得到通知並自動更新。8.
8.策略 9.模板