1. 程式人生 > >1.Spring、IOC與依賴注入

1.Spring、IOC與依賴注入

  1.  Spring概述

Spring是分層的Java SE/EE應用 full-stack輕量級開源框架,以IoC(Inverse Of Control:反轉控制)和 AOP(Aspect Oriented Programming:面向切面程式設計)為核心,提供了展現層Spring MVC和持久層Spring JDBC以及業務層事務管理等眾多的企業級應用技術,還能整合開源世界眾多著名的第三方框架和類庫,逐漸成為使用最多的Java EE企業應用開源框架。

通過Spring提供的IoC容器(本質就是一個map,key是字串,值是物件),可以將物件間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程式耦合。使用者也不必再為單例模式類、屬性檔案解析等這些很底層的需求編寫程式碼,可以更專注於上層的應用。

AOP程式設計的支援

通過Spring的AOP功能,方便進行面向切面的程式設計,許多不容易用傳統OOP實現的功能可以通過AOP輕鬆應付。

  1. IOC的概念

劃分模組的一個準則就是高內聚低耦合。

程式間的依賴關係。

獨立性很差,可重用度不高。

2.1工廠式解耦

以上這種方式建立物件會產生耦合,在開發過程中,減少使用這種開發模式。

第一步:先把建立的xml反射替代出來new物件,用反射去建立,然後把發射物件剝離到一個配置檔案中。

第二步:然後去用BeanFactory去控制這個檔案配置。

到了第二步,這種方式就是工廠式解耦。

由原來的主動索要資源,到現在的被動的給資源。工廠生產什麼,它就接收什麼,在這個過程中有可能會產生不能匹配的檔案。

當然在建立的工廠IOC容器中有兩個讀取配置的兩個物件:一個是Properties另一個是ResourceBundle

ResourceBundle.getBudle(); a.這個物件只能取值不能賦值;

b.只能讀取properties配置檔案(是因為沒有新增副檔名的機會),所以別的不行。

C. 它只能讀取類路徑下的properties檔案,別的地方不行。

但是它還有一個細節就是如下全限定類名和絕對路徑的區別

工廠式解耦原理:

2.2控制反轉-Inversion of Control

它的主要目的就是解耦。

在service中不可能有可變的方法??

想建立一個物件,只有把工廠物件放外邊,放裡邊會產生多個物件。以下就是springioc的原理:

  1. 使用spring的ioc

注意:準備springjar包(5以上就行)

匯入約束xmlns

左圖就是用到spring IOC的話,需要配置的三個檔案。

  1. spring的分析

以下是獲取的容器中物件的方法:

 

BeanFactory和ApplicationContext的區別:

Spring bean物件的細節--以下是關於bean.xml中的分析:

  1. 建立bean物件的三種方式:

 

  1.  Bean物件作用範圍改變

  1. Bean物件得生命週期

  1. 配置物件:把物件的建立交給spring來管理:依賴注入

什麼是依賴注入?就是把當前所需要的物件傳進來就是依賴注入。

如下程式碼所示:

複雜型別注入

 

補充:

@Service是一個註解啊,告訴spring建立一個實現類的例項啊。。。
就是不用再spring裡配置bean,就是因為這個@Service

@Repository用於標註資料訪問元件,即DAO元件;

在一個稍大的專案中,如果元件採用xml的bean定義來配置,顯然會增加配置檔案的體積,查詢以及維護起來也不太方便。