Spring
輕量級控制反轉和面向切面的容器框架。
功能:
- 使用基本的JavaBean代替EJB(Enterprise JavaBean)
優點:
- 低侵入性
- 高服用性
- DI有效降低耦合度
- AOP提供了通用任務的集中管理
- ORM(對象實體映射)和DAO簡化對數據庫的訪問
- 高開放性,并不強制
核心:
spring_framework
IoC
Inversion of Control,控制反轉,其另一個名字是依賴注入(Dependency Injection),就是有Ioc容器在運行期間,動態地將某種依賴關系注入到對象之中。
所以,DI和IoC是從不同角度描述的同一件事情,就是指通過引入IoC容器,利用依賴關系注入的方式,實現對象的解耦。
粘合劑,將對象之間的耦合交給IoC容器進行,從而達到解耦的目的。
AOP
面向切面編程,從動態角度研究。
功能:將系統級別處理(日志管理、調試管理、事務管理、緩存等等)分離出來,模塊化,而不影響業務邏輯。
專門用于處理系統中分布于各個模塊中的交叉關注點的問題。
AOP 代理其實是由AOP框架動態生成的一個對象,該對象可作為目標對象使用。
AOP使用:
- 定義普通業務組件
- 定義切入點
- 定義增強處理
代理對象的方法 = 被代理對象的方法 + 增強處理
AOP關鍵概念:
- 橫切性關注點(Cross Cut Concern):一個獨立的服務,不與其他業務邏輯耦合??赡鼙椴荚谙到y的各個角落,也可能遍布在系統的處理流程之中。
- 切面(Aspect):一個關注點的模塊化,生成對應的類,這個類就叫切面。切面可能會橫切多個對象。
- 通知(Advice):對橫切性關注點的具體實現。通知類型有:before、throw和after等。多數使用攔截器作為通知模型
- 連接點(Joi Point):程序執行中的某個特定點,比如某方法調用或處理異常時,也就是Advice在應用程序上執行的點或時機。
- 切入點(Point Cut):可以設定具體的方法上是否需要橫切性關注點的實現。
- 織入(Weave):把切面連接到其他的應用程序類型或者對象上。
- 目標對象(Target Object):被一個或多個切面所通知的對象。
- AOP代理(AOP Proxy):AOP框架創建的對象,用來實現切面契約。
- 引入(Introduction):也被稱為內容類型聲明。聲明額外的方法或者某個類型的字段。
開發環境搭建
直接通過IDEA新建一個Spring項目。
Ioc注入
- Spring通過
<null/>
注入null值 - 通過
ref="xxBean"
進行bean注入,通過value="xxValue"
進行值注入 - 通過
<constructor-arg>
注入構造參數值 - 通過
<property>
注入屬性值 - 通過
<list>
注入list數據,通過<array>
注入array數據,通過<map>
注入map數據,通過<set>
注入set數據 - 設置
lazy-init="true"
進行延遲初始化 - bean的作用域有兩種,分別是
singleton
和prototype
。singleton是默認的scope,其實現方式是通過注冊表方式注冊道單例緩存池。設置為prototype則每次向Spring容器請求獲取Bean都返回一個全新的Bean。
基于注解的配置
開啟方式:在spring的config文件的<beans>
下增加
<context:annotation-config/>
<!--設置對指定的包名下的Spring注解生效-->
<context:component-scan base-package=”com.demo”>
使用:
注解 | 描述 | 應用域 |
---|---|---|
@Required | 進行依賴檢查,只判斷字段是否使用了setter注入,若無則拋出異常 | bean屬性的setter方法 |
@Autowired | 自動裝配,默認按類型裝配 | bean屬性的setter方法、非setter方法、構造函數、屬性 |
@Qualifier | 實現類的類名 | 作為@Autowired的補充,當對應的屬性有多個實現時,聲明@Qualifier幫助其自動裝配 |
@Resource | 默認按名稱裝配,當找不到與名稱匹配的bean才會按類型裝配 | 屬性(屬于JSR-250的注解) |
@Component、@Service、@Controller、@Repository | @Component用于說明一個類是Spring容器管理的類,@Service、@Controller、@Repository是@Component的細化,分別代表服務層、控制層和持久層 | 類 |