1. 程式人生 > >spring基礎之pojo和javaBean及依賴注入

spring基礎之pojo和javaBean及依賴注入

pojo值普通java物件,沒有業務邏輯,只包含私有屬性,和訪問這些私有屬性的get,set方法。沒有繼承任何類,沒有實現任何介面,更沒有被其他框架侵入。

bean指可重用元件,javaBean及java語言編寫的可重用元件bean。可序列化(實現了serializable介面)。

 

依賴注入這個詞讓人望而生畏,但事實證明依賴注入並不像它聽上去那麼複雜,在專案中應用DI依賴注入(介面方式)你會發現你的程式碼變得簡單並且更容易測試和理解。

(常見的依賴注入有三種:介面注入,setter方法注入,建構函式注入。

建構函式注入的特點:

/*以裝配資訊(物件建立和物件組裝(注入)的資訊)為入參建立spring上下文(spring容器)*/  或叫
/*以bean建立資訊和bean組裝資訊為入參建立spring上下文(spring容器)*/

DI依賴注入(加IOC容器)是控制反轉IOC思想的實現方式之一,ServiceLocator服務定位器也可以實現控制反轉來消除類之間的依賴)

任何一個有實際意義的應用都由多個類組成,按照傳統,每個物件負責管理與自己相互協作的物件的引用。由此也導致高度耦合和難以測試。

 

鬆耦合的出發點:在目標類外面建立介面的實現類物件,以介面作為建構函式的引數傳給目標類進行注入比直接在目標類中用建構函式new進行注入更加鬆耦合。(本質上當然都是在目標類的建構函式中進行注入的)

那麼接下來如何將介面的某個具體實現類傳給目標類的建構函式呢?或者說如何裝配?

spring通過應用上下文裝載bean的定義並把他們裝配起來。spring自帶了多種應用上下文的實現,它們的區別僅僅是如何載入配置檔案。有了上下文物件,我們就能向容器註冊需要spring管理的物件了(不管是基於註解註冊還是基於XML註冊)。

對於上下文抽象介面,Spring也為我們提供了多種型別的容器實現,供我們在不同的應用場景選擇——

  1. AnnotationConfigApplicationContext:從一個或多個基於java的配置類中載入上下文定義,適用於java註解的方式;
  2.  ClassPathXmlApplicationContext:從類路徑下的一個或多個xml配置檔案中載入上下文定義,適用於xml配置的方式;
  3.  FileSystemXmlApplicationContext:從檔案系統下的一個或多個xml配置檔案中載入上下文定義,也就是說系統碟符中載入xml配置檔案;
  4.  AnnotationConfigWebApplicationContext:專門為web應用準備的,適用於註解方式;
  5.  XmlWebApplicationContext:從web應用下的一個或多個xml配置檔案載入上下文定義,適用於xml配置方式。

有了以上理解,問題就很好辦了。你只要將你需要IOC容器替你管理的物件基於xml也罷,java註解也好,總之你要將需要管理的物件(Spring中我們都稱之問bean)、bean之間的協作關係配置好,然後利用應用上下文物件載入進我們的Spring容器,容器就能為你的程式提供你想要的物件管理服務了。

現在一般都不在程式碼中用new建立上下文:通常為在web.xml中配置

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

此時將預設載入/WEB-INF/下的applicationContext.xml裝配資訊,如果applicationContext.xml檔案沒有在/WEB-INF/下,或檔名不一致,或存在多個Spring配置檔案,在web.xml檔案中根據下面程式碼修改

單個裝配資訊:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:mobile-webapp-context.xml</param-value>
</context-param>

多個裝配資訊:

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath*:applicationContext-*.xml,/WEB-INF/applicationContext.xml,/WEB-INF/classes/applicationContext-*.xml
</param-value>
</context-param>

應用上下文可以簡單的理解成Spring容器的一種實現,即用於操作容器的容器類物件(或者說是spring容器的介面,就像socket與網路連線的關係一樣)。通過上下文可以將需要Spring幫你管理的物件放入容器中,使用時呼叫上下文的方法取得容器裡的Bean。https://www.i3geek.com/archives/1934

 

DI能夠讓相互協作的軟體元件保持鬆散耦合,而面向切面程式設計AOP允許你把遍佈應用各處的功能分離出來形成可重用的元件。