Spring中用到了哪些設計模式?
?一位應屆畢業生被問到這樣一道面試題,說Spring用到了哪些設計模式?其實只要Spring使用得夠熟練,回答這道題還是非常輕松的。因為Spring的命名非常規范,基本上從類名就可以看得出來用到了哪些設計模式。
今天,我給大家分享一下我的理解。
我給大家總結以下8種設計模式在Spring中的應用:
1、工廠模式。
Spring的BeanFactory類,就是使用了簡單工廠模式。它主要提供getBean()方法,用來創建對象的實例;我們見得比較多的ApplicationContext也是繼承自BeanFactory。
2、單例模式。
Spring中的Bean默認為singleton單例。我們可以通過配置Bean的作用域scope參數來進行修改。Spring Bean一共有5種內置的作用域,分別是singleton、prototype、request、session、globalSession。
3、裝飾器模式。
在Spring中,只要見到以Wrapper命名的類基本都是使用裝飾器模式。比如BeanWrapper,用來訪問Bean的屬性和方法。
4、策略模式。
Spring中Bean的實例化采用的就是策略模式。因為Bean的實例化包含原生對象的實例化,和代理對象的實例化,不同對象實例化的邏輯也不一樣,所以實例化策略也不一樣,比如SimpleInstantiationStrategy就是Spring中默認的實例化策略。
5、適配器模式。
在Spring,只要是以Adapter命名的類基本都是適配器模式的應用。比如MVC模塊中的HandlerAdapter。
6、代理模式。
比如AOP模塊中的AopProxy,用到了JDK的動態代理和CGLIB字節碼生成技術;
7、模板方法模式。
主要用來解決代碼重復的問題。Spring提供了非常多的模板類來減少重復代碼,基本都是以Template結尾,比如RestTemplate,JmsTemplate,JdbcTemplate。
8、觀察者模式。
主要用于當一個對象的狀態發生改變時,所有依賴于它的對象都會得到通知,在Spring中一般以Listener結尾,比如ApplicationListener等等。
當然,Spring是一個非常經典的框架,它用的的設計模式也非常多。而且很多設計模式經常是混合使用的,都是你中有我,我中有你。所以,我們在閱讀代碼的時候,還不能簡單地斷定某個類就一定是只用了某一種設計模式。
以上就是我對Spring中主要設計模式的分享。