摘要:簡單明了,如果婚介給我們的人選不符合要求,我們就會(huì)拋出異常。的一個(gè)重點(diǎn)是在系統(tǒng)運(yùn)行中,動(dòng)態(tài)的向某個(gè)對(duì)象提供它所需要的其他對(duì)象。切點(diǎn)通過一個(gè)條件來匹配要攔截的類,這個(gè)條件稱為切點(diǎn)。
特點(diǎn)
1. IOC/依賴注入
IOC就是一個(gè)負(fù)責(zé)控制管理對(duì)象生命周期和對(duì)象間關(guān)系的容器。IOC讓程序員用關(guān)注怎么去創(chuàng)建對(duì)象,不必再為單實(shí)例模式類、屬性文件解析等這些很底層的需求編寫代碼,而是關(guān)注對(duì)象創(chuàng)建之后的操作,把對(duì)象的創(chuàng)建、初始化、銷毀等工作交給spring容器來做。
舉個(gè)例子,我們是如何找女朋友的?常見的情況是,我們到處去看哪里有長得漂亮身材又好的mm,然后打聽她們的興趣愛好、qq號(hào)、電話號(hào)…,想辦法認(rèn)識(shí)她們,投其所好送其所好,然后嘿嘿…這個(gè)過程是復(fù)雜深?yuàn)W的,我們必須自己設(shè)計(jì)和面對(duì)每個(gè)環(huán)節(jié)。
傳統(tǒng)的程序開發(fā)也是如此,在一個(gè)對(duì)象中,如果要使用另外的對(duì)象,就必須得到它(自己new一個(gè),或者從JNDI中查詢一個(gè)),使用完之后還要將對(duì)象銷毀(比如Connection等),對(duì)象始終會(huì)和其他的接口或類藕合起來。
IOC容器有點(diǎn)像通過婚介找女朋友,在我和女朋友之間引入了一個(gè)第三者:婚姻介紹所?;榻楣芾砹撕芏嗄心信馁Y料,我可以向婚介提出一個(gè)列表,告訴它我想找個(gè)什么樣的女朋友,比如長得像李嘉欣,身材像林熙雷,技術(shù)像齊達(dá)內(nèi)之類的,然后婚介就會(huì)按照我們的要求,提供一個(gè)mm,我們只需要去和她談戀愛、結(jié)婚就行了。簡單明了,如果婚介給我們的人選不符合要求,我們就會(huì)拋出異常。整個(gè)過程不再由我自己控制,而是有婚介這樣一個(gè)類似容器的機(jī)構(gòu)來控制。
Spring所倡導(dǎo)的開發(fā)方式就是如此:所有的類都會(huì)在spring容器中登記,告訴spring你是個(gè)什么東西,你需要什么東西,然后spring會(huì)在系統(tǒng)運(yùn)行到適當(dāng)?shù)臅r(shí)候,把你要的東西主動(dòng)給你,同時(shí)也把你交給其他需要你的東西。所有的類的創(chuàng)建、銷毀都由 spring來控制,也就是說控制對(duì)象生存周期的不再是引用它的對(duì)象,而是spring。對(duì)于某個(gè)具體的對(duì)象而言,以前是它控制其他對(duì)象,現(xiàn)在是所有對(duì)象都被spring控制,所以這叫控制反轉(zhuǎn)。
IoC的一個(gè)重點(diǎn)是在系統(tǒng)運(yùn)行中,動(dòng)態(tài)的向某個(gè)對(duì)象提供它所需要的其他對(duì)象。這一點(diǎn)是通過DI(Dependency Injection,依賴注入)來實(shí)現(xiàn)的。比如對(duì)象A需要操作數(shù)據(jù)庫,以前我們總是要在A中自己編寫代碼來獲得一個(gè)Connection對(duì)象,有了 spring我們就只需要告訴spring,A中需要一個(gè)Connection,至于這個(gè)Connection怎么構(gòu)造,何時(shí)構(gòu)造,A不需要知道。在系統(tǒng)運(yùn)行時(shí),spring會(huì)在適當(dāng)?shù)臅r(shí)候制造一個(gè)Connection,然后像打針一樣,注射到A當(dāng)中,這樣就完成了對(duì)各個(gè)對(duì)象之間關(guān)系的控制。A需要依賴 Connection才能正常運(yùn)行,而這個(gè)Connection是由spring注入到A中的,依賴注入的名字就這么來的。
2. AOP稱為面向切面編程
OOP允許定義從上到下的關(guān)系,但并不適合定義從左到右的關(guān)系。AOP在程序開發(fā)中主要用來解決一些系統(tǒng)層面上的問題,比如日志,事務(wù),權(quán)限等待,Struts2的攔截器設(shè)計(jì)就是基于AOP的思想,是個(gè)比較經(jīng)典的例子。
基本概念:
切面(Advisor):是AOP中的一個(gè)術(shù)語,表示從業(yè)務(wù)邏輯中分離出來的橫切邏輯,比如性能監(jiān)控,日志記錄,權(quán)限控制等。這些功能都可以從核心的業(yè)務(wù)邏輯中抽離出去??梢越鉀Q代碼耦合問題,職責(zé)更加單一。封裝了增強(qiáng)和切點(diǎn)。
增強(qiáng)(Advice):增強(qiáng)代碼的功能的類,橫切到代碼中(如:方法)。
目標(biāo):目標(biāo)方法(JDK代理)或目標(biāo)類(CGLIB代理)
代理:JDK代理,CGLIB代理。或是通過 ProxyFactory 類生產(chǎn)。
切點(diǎn):通過一個(gè)條件來匹配要攔截的類,這個(gè)條件稱為切點(diǎn)。如攔截所有帶 Controller 注解的類。增強(qiáng)的條件。
連接點(diǎn):作為增強(qiáng)方法的入?yún)?,可以獲取到目標(biāo)方法的信息。
JDK 1.8+
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71651.html
摘要:微服務(wù)架構(gòu)概述應(yīng)用架構(gòu)的發(fā)展應(yīng)用是可獨(dú)立運(yùn)行的程序代碼,提供相對(duì)完善的業(yè)務(wù)功能。阿里開源的是的典型實(shí)現(xiàn)。它目前由官方開發(fā)維護(hù),基于開發(fā),提供一套完整的微服務(wù)解決方案。 微服務(wù)與Spring Cloud 隨著互聯(lián)網(wǎng)的快速發(fā)展, 云計(jì)算近十年也得到蓬勃發(fā)展, 企業(yè)的IT環(huán)境和IT架構(gòu)也逐漸在發(fā)生變革,從過去的單體應(yīng)用架構(gòu)發(fā)展為至今廣泛流行的微服務(wù)架構(gòu)。 微服務(wù)是一種架構(gòu)風(fēng)格, 能給軟件應(yīng)用...
摘要:除此之外,還為不同的應(yīng)用程序體系結(jié)構(gòu)提供了基礎(chǔ)支持,包括消息傳遞事務(wù)數(shù)據(jù)和持久性以及,它還包括基于的框架,以及與之并行的反應(yīng)性框架。還支持依賴項(xiàng)注入和公共注解規(guī)范,應(yīng)用程序開發(fā)人員可以選擇使用這些規(guī)范,而不是提供的特定于的機(jī)制。 概述 Spring使創(chuàng)建Java企業(yè)應(yīng)用程序變得很容易,它提供了在企業(yè)環(huán)境中使用Java語言所需要的一切,支持Groovy和Kotlin作為JVM上的替代語言...
摘要:容器概述接口表示容器,負(fù)責(zé)實(shí)例化配置和組裝?;诘脑獢?shù)據(jù)不是惟一允許的配置元數(shù)據(jù)形式,容器本身與實(shí)際編寫配置元數(shù)據(jù)的格式完全解耦,現(xiàn)在,許多開發(fā)人員為他們的應(yīng)用程序選擇基于的配置。 容器概述 org.springframework.context.ApplicationContext接口表示Spring IoC容器,負(fù)責(zé)實(shí)例化、配置和組裝bean。容器通過讀取配置元數(shù)據(jù)獲取關(guān)于要實(shí)例化...
摘要:關(guān)于文檔參考指南可用如下方式最新的副本可以在中找到。嘗試操作文檔,它們?yōu)樽畛R姷膯栴}提供解決方案。學(xué)習(xí)基礎(chǔ),構(gòu)建在許多其他項(xiàng)目上,網(wǎng)站提供豐富的參考文檔,如果你要從開始,嘗試其中一個(gè)指南。我們對(duì)進(jìn)行監(jiān)視,以解決帶有標(biāo)記的問題。 1. 關(guān)于文檔 Spring Boot 參考指南可用如下方式: HTML PDF EPUB 最新的副本可以在 docs.spring.io/spring-b...
摘要:概述容器管理一個(gè)或多個(gè),這些是使用你提供給容器的配置元數(shù)據(jù)創(chuàng)建的例如,以定義的形式。在容器內(nèi)部,這些定義被表示為對(duì)象,其中包含其他信息以下元數(shù)據(jù)包限定的類名通常,定義的實(shí)際實(shí)現(xiàn)類。 Bean概述 Spring IoC容器管理一個(gè)或多個(gè)bean,這些bean是使用你提供給容器的配置元數(shù)據(jù)創(chuàng)建的(例如,以XML 定義的形式)。 在容器內(nèi)部,這些bean定義被表示為BeanDefinitio...
閱讀 3891·2021-09-10 11:22
閱讀 2365·2021-09-03 10:30
閱讀 3677·2019-08-30 15:55
閱讀 1921·2019-08-30 15:44
閱讀 855·2019-08-30 15:44
閱讀 603·2019-08-30 14:04
閱讀 3056·2019-08-29 17:18
閱讀 1278·2019-08-29 15:04