Spring小記(一)
學習Spring框架已有1個月,實習做得最多的就是把Spring啃了下來,還是很開心。相信每個敲程式碼的孩紙都是折翼的天使,因為善良和堅持,終會有所收穫。
Spring平臺實在大,最主要部分可以分為:IoC、AOP、元件。元件又包括流行一時的Spring MVC、Spring Boot、Spring JDBC等等,包羅永珍。
(一) IOC:控制反轉與注入依賴相信很多人都會被這個搞暈掉。其實都是指IOC容器,不過是概念上各有側重。舉個例子,以往在Serivice層中呼叫Dao層,我們用程式碼控制:XXDao dao=new XXDao();在Spring中,我們把建立交給了IOC容器解決,只需要:
1、IOC容器框架:
最基本的IOC容器就是BeanFactory。萬物不離其宗,所有的IOC容器都是繼承這個介面去實現。IOC容器的核心兩者是BeanFactory與ApplicationContext。後者是在前者的基礎上,繼承了Resource等一系列高大上元件從而豐富了IOC容器。所以說,最基本的是BeanFactory,可是最常用的莫過於ApplicationContext
2、IOC容器中Bean生命週期:
(1) Bean例項建立;
(2) 為Bean例項設定屬性;
(3) 呼叫Bean的初始化方法;
(4) 應用可通過IOC容器使用Bean;
(5) 當容器關閉時,呼叫Bean銷燬方法;
3、 IOC容器管理Bean有4個工序:尋找Bean定義資源、載入和註冊、注入依賴。前三者在IOC容器初始化中完成,注入依賴就具有不確定性。當預例項化時也在初始化中。準確地定義應該是,注入依賴發生在使用者第一次向IOC容器索要Bean時觸發,getBean方法是其入口函式。
(1) 定義資源。Spring有容乃大,無論你是ClathFile
<Context-param>
<context-param>
<param-name>自定義名稱</param-name>
</context-param>
</Context-param>
②路徑,預設路徑在ClathPath:下,不要擔心,你是可以配置路徑的。在自定義名稱標籤下再新增一段<param-value>自定義路徑</param-value>.
③匯入包。有時候什麼都沒問題,還是出錯時,說不定就是匯入包不對。比如,Spring框架中包有很多,core/aop啊什麼的。不同的包各有側重,具體見官方文件描述。當所需要的類剛好沒匯入時,問題就會出現。所以,耐心地看出錯清單,提示還是很清楚的 ,匯入相應的包問題就解決了。
(2) 載入資源。給了Bean定義文件,容器會去分析結構,然後呢?然後就是把資訊轉化成容器內部資料結構。這個說起來很抽象,其實不過就是轉出POJO便於後續處理。
(3) 註冊。註冊過程就是將載入中轉化成的內部資料結構對映到HASHMAP中。沒錯,Spring最基本的註冊工具就是Map。Key是Bean名字,值就是內部資料結構。
(4) 注入依賴。這個說起來就大了呢。Bean依賴關係管理主要分為3種注入模式:自動注入@Autowired,建構函式、BeanDefinition的屬性值。粗略而言,容器檢測是否有索要Bean,檢測到後呼叫getBean將其載入進來。
4、 最基本的IOC容器的使用過程
貼一段我的簡單運用:
ClassPathResource resource=new ClassPathResource("applicationContext.xml");//定義BeanDefinition資訊
DefaultListableBeanFactory beanFactory=new DefaultListableBeanFactory();//建立IOC容器
XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(beanFactory);//建立IOC容器的BeanDefinition閱讀器
reader.loadBeanDefinitions(resource);//匯入資源,IOC容器回撥建立bean
CommonEmployee bean=(CommonEmployee)beanFactory.getBean("targetbean");
bean.setName("wang");
System.out.print("OK"+bean.getName());
不得吧說IoC容器博大精深,三眼兩語並不能真正闡述清楚。以上只是入門見解,而更多的知識與思想都只能通過看原始碼和官方文件進行補充。