成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring入門(mén)IOC和AOP學(xué)習(xí)筆記

wenyiweb / 2063人閱讀

摘要:入門(mén)和學(xué)習(xí)筆記概述框架的核心有兩個(gè)容器作為超級(jí)大工廠,負(fù)責(zé)管理創(chuàng)建所有的對(duì)象,這些對(duì)象被稱為。中的一些術(shù)語(yǔ)切面切面組織多個(gè),放在切面中定義。

Spring入門(mén)IOC和AOP學(xué)習(xí)筆記 概述

Spring框架的核心有兩個(gè):

Spring容器作為超級(jí)大工廠,負(fù)責(zé)管理、創(chuàng)建所有的Java對(duì)象,這些Java對(duì)象被稱為Bean。

Spring容器管理容器中Bean之間的依賴關(guān)系,使用一種叫做“依賴注入”的方式來(lái)管理bean之間的依賴關(guān)系。

Spring有兩個(gè)核心接口:BeanFactoryApplicationContext,ApplicationContextBeanFactory的子接口、它們都可以代表Spring容器,Spring容器是生成Bean實(shí)例的工廠,并管理容器中的Bean。建議優(yōu)先使用ApplicationContext。除非對(duì)內(nèi)存非常關(guān)鍵的應(yīng)用再考慮使用BeanFactory。當(dāng)系統(tǒng)創(chuàng)建ApplicationContext的時(shí)候,默認(rèn)會(huì)預(yù)初始化所有Singleton Bean,這就意味著前期創(chuàng)建ApplicationContext時(shí)將有較大的性能開(kāi)銷,但一旦ApplicationContext初始化完成,程序后面獲取singleton Bean實(shí)例時(shí),就擁有較好的性能。為元素指定lazy-init="true"那么就不會(huì)預(yù)初始化Singleton bean了。

IOC

Inversion Of Control,控制反轉(zhuǎn),也可以叫依賴注入。A對(duì)象需要調(diào)用B對(duì)象的方法的情景,這種情形稱為依賴,即A對(duì)象依賴B對(duì)象。使用依賴注入不僅可以為Bean對(duì)象注入普通的屬性值,還可以注入其他Bean引用。通過(guò)這種依賴注入,Java EE應(yīng)用中的各種組件不需要以硬編碼方式耦合在一起,甚至無(wú)需使用工廠模式。當(dāng)某個(gè)Java實(shí)例需要其他Java實(shí)例時(shí),系統(tǒng)自動(dòng)提供所需要的實(shí)例,無(wú)需程序顯式獲取。

好處

先來(lái)說(shuō)說(shuō)傳統(tǒng)使用java實(shí)例的不足,一般有兩種方式:

通過(guò)new關(guān)鍵字實(shí)例化一個(gè)對(duì)象;

通過(guò)工廠模式生產(chǎn)一個(gè)實(shí)例對(duì)象;

第一種方式必然導(dǎo)致調(diào)用者和被依賴對(duì)象存在硬編碼耦合,非常不利于項(xiàng)目升級(jí)的維護(hù);第二種比第一種好很多,但是調(diào)用組件需要主動(dòng)通過(guò)工廠去獲取被依賴的對(duì)象,這就會(huì)帶來(lái)調(diào)用組件與被依賴工廠的耦合。

那么IOC有什么好處呢?

調(diào)用者無(wú)需主動(dòng)獲取被依賴的對(duì)象,只要被動(dòng)接受Spring容器為調(diào)用者的成員變量即可??傮w來(lái)說(shuō)就是主動(dòng)變?yōu)楸粍?dòng),所以被稱為控制反轉(zhuǎn)。

場(chǎng)景

依賴注入一般有以下兩種:

設(shè)值注入:IoC容器使用成員變量的setter方法來(lái)注入被依賴對(duì)象;

構(gòu)造注入:IoC容器通過(guò)構(gòu)造器來(lái)注入被依賴對(duì)象;

建議采用設(shè)值注入為主,構(gòu)造注入為輔的注入策略。對(duì)于依賴關(guān)系無(wú)需變化的注入,盡量采用構(gòu)造注入;而其他依賴關(guān)系的注入,則考慮采用設(shè)值注入。

使用IoC容器的三個(gè)基本要點(diǎn):

應(yīng)用程序的各組件面向接口編程,這樣就可以將組件之間的耦合關(guān)系提升到接口層次,從而有有利于項(xiàng)目后期的發(fā)展;

應(yīng)用程序的各組件不再由程序主動(dòng)創(chuàng)建,而是由Spring容器來(lái)負(fù)責(zé)產(chǎn)生并初始化;

Spring采用配置文件或注解來(lái)管理Bean的實(shí)現(xiàn)類、依賴關(guān)系,Spring容器則根據(jù)配置文件或注解,利用反射來(lái)創(chuàng)建實(shí)例,并為之注入依賴關(guān)系。

AOP

Aspect Oriented Programming,面向切面編程,用于在模塊化方面的橫切關(guān)注點(diǎn)。AOP和OOP(Object Oriented Programming)互為補(bǔ)充,可以這么理解:面向?qū)ο缶幊淌菑撵o態(tài)角度縱向考慮程序結(jié)構(gòu),面向切面編程則是從動(dòng)態(tài)角度橫向考慮運(yùn)行過(guò)程。比如一個(gè)日記記錄的功能,代碼往往水平的散落在所有對(duì)象中,與被散布的對(duì)象的核心功能沒(méi)什么關(guān)系,這種散布在各個(gè)對(duì)象中的無(wú)關(guān)代碼被稱為“橫切代碼”,在OOP的設(shè)計(jì)中,它導(dǎo)致了大量代碼的重復(fù),從而不利于各個(gè)模塊的復(fù)用。

簡(jiǎn)單的說(shuō),它是一個(gè)攔截器可以攔截一些過(guò)程,當(dāng)一個(gè)方法執(zhí)行,Spring AOP可以攔截一個(gè)方法的執(zhí)行,在這個(gè)方法執(zhí)行的前后添加一些功能。

AOP中的一些術(shù)語(yǔ)

切面(Aspect):切面組織多個(gè)Advice,Advice放在切面中定義。

連接點(diǎn)(JoinPoint):程序執(zhí)行過(guò)程中明確的點(diǎn),如方法的調(diào)用,或者異常的拋出,在Spring AOP中,連接點(diǎn)總是方法的調(diào)用。

增強(qiáng)處理(Advice):AOP框架在特定的切入點(diǎn)執(zhí)行的增強(qiáng)處理,處理有“before”、“after”、“after-returning”、“around”、“after-throwing”等;

切入點(diǎn)(Pointcut):可以插增強(qiáng)處理的連接點(diǎn)。當(dāng)某個(gè)連接點(diǎn)滿足指定要求時(shí),該連接點(diǎn)將被添加增強(qiáng)處理(Advice),該連接點(diǎn)也就變成了切入點(diǎn)。

以一個(gè)bean配置為例:


        
        
            
            
            
        
    

其中標(biāo)簽就是切面,此標(biāo)簽下面的、這些就是增強(qiáng)處理,那么在哪里進(jìn)行增強(qiáng)處理呢?pointcut屬性就定義了切入點(diǎn),也就是在哪里進(jìn)行增強(qiáng)處理。這里的表達(dá)式比如execution(* com.wangjun.aop.xml.*.*(..))含義如下:

指定在com.wangjun.aop.xml包中任意類方法;

第一個(gè)*表示返回值不限,第二個(gè)*表示類名不限;

第三個(gè)*表示方法名不限,圓括號(hào)中的(..)表示任意個(gè)數(shù)、類型不限的形參。

還有一些術(shù)語(yǔ):

引入:將方法或字段添加到被處理的類中。Spring允許將新的接口引入到任何被處理的對(duì)象中,例如,你可以使用一個(gè)引入,使任何對(duì)象實(shí)現(xiàn)isModify接口,以此來(lái)簡(jiǎn)化緩存。

目標(biāo)對(duì)象:被AOP框架增強(qiáng)處理的對(duì)象。如果AOP采用的是動(dòng)態(tài)AOP實(shí)現(xiàn),那么該對(duì)象就是一個(gè)被代理的對(duì)象;

AOP代理:AOP框架創(chuàng)建的對(duì)象,也可以是cglib代理,代理就是堆目標(biāo)對(duì)象的加強(qiáng)。

織入(Weaving):將增強(qiáng)處理添加到目標(biāo)對(duì)象中,并創(chuàng)建一個(gè)被增強(qiáng)的對(duì)象的過(guò)程就是織入。Spring和其他純javaAOP框架一樣,在運(yùn)行時(shí)完成織入。

使用場(chǎng)景

日志記錄、審計(jì)、聲明式事務(wù)、安全性和緩存等。

AspectJ和Spring AOP的區(qū)別

正好代表了實(shí)現(xiàn)AOP的兩種方式:

AspectJ是靜態(tài)實(shí)現(xiàn)AOP的,即在編譯階段對(duì)程序進(jìn)行修改,需要特殊的編譯器,具有較好的性能;

Spring AOP是動(dòng)態(tài)實(shí)現(xiàn)AOP的,即在運(yùn)行階段動(dòng)態(tài)生成AOP代理,純java實(shí)現(xiàn),因此無(wú)需特殊的編譯器,但是通常性能較差。

目前Spring已經(jīng)對(duì)AspectJ進(jìn)行了很好的集成。

Spring實(shí)現(xiàn)AOP的方式

基于注解的“零配置”方式:使用@Aspect、@Pointcut等注解標(biāo)注切入點(diǎn)和增強(qiáng)處理;

基于XML配置文件的管理方式:使用Spring配置文件來(lái)定義切入點(diǎn)和增強(qiáng)處理;

Spring AOP的動(dòng)態(tài)代理

所謂的動(dòng)態(tài)代理就是說(shuō)AOP框架不會(huì)去修改字節(jié)碼,而是在內(nèi)存中臨時(shí)為方法生成一個(gè)AOP對(duì)象,這個(gè)AOP對(duì)象包含了目標(biāo)對(duì)象的全部方法,并且在特定的切點(diǎn)做了增強(qiáng)處理,并回調(diào)原對(duì)象的方法。

Spring AOP中的動(dòng)態(tài)代理主要有兩種方式,JDK動(dòng)態(tài)代理CGLIB動(dòng)態(tài)代理。JDK動(dòng)態(tài)代理通過(guò)反射來(lái)接收被代理的類,并且要求被代理的類必須實(shí)現(xiàn)一個(gè)接口。JDK動(dòng)態(tài)代理的核心是InvocationHandler接口和Proxy類。

如果目標(biāo)類沒(méi)有實(shí)現(xiàn)接口,那么Spring AOP會(huì)選擇使用CGLIB來(lái)動(dòng)態(tài)代理目標(biāo)類。CGLIB(Code Generation Library),是一個(gè)代碼生成的類庫(kù),可以在運(yùn)行時(shí)動(dòng)態(tài)的生成某個(gè)類的子類,注意,CGLIB是通過(guò)繼承的方式做的動(dòng)態(tài)代理,因此如果某個(gè)類被標(biāo)記為final,那么它是無(wú)法使用CGLIB做動(dòng)態(tài)代理的。

學(xué)習(xí)路徑

構(gòu)建AOP和IOC的demo;

安裝spring工具套件STS;

使用無(wú)注解方式進(jìn)行AOP;

使用xml配置方式進(jìn)行AOP;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69279.html

相關(guān)文章

  • Spring框架學(xué)習(xí)筆記(一):官方文檔介紹,IoCAOP概念學(xué)習(xí)

    摘要:構(gòu)造函數(shù)注入通過(guò)調(diào)用類的構(gòu)造函數(shù),將接口實(shí)現(xiàn)類通過(guò)構(gòu)造函數(shù)變量傳入。而在中,其使用橫切技術(shù),將這類代碼從原屬的封裝對(duì)象中提取出來(lái),封裝到一個(gè)可重用模塊中,稱為。 最近實(shí)習(xí)用到Spring的開(kāi)發(fā)框架,但是之前沒(méi)有接觸過(guò),因此希望利用網(wǎng)上的資源來(lái)學(xué)習(xí)以下。 Spring官方給出了非常全面的介紹,非常適合我這種完全的小白……在這一系列學(xué)習(xí)中,我閱讀的主要資源是5.1.2 Reference ...

    mindwind 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Spring入門(mén)篇》學(xué)習(xí)總結(jié)

    摘要:入門(mén)篇學(xué)習(xí)總結(jié)時(shí)間年月日星期三說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等。 《Spring入門(mén)篇》學(xué)習(xí)總結(jié) 時(shí)間:2017年1月18日星期三說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://git...

    Ververica 評(píng)論0 收藏0
  • Java深入-框架技巧

    摘要:從使用到原理學(xué)習(xí)線程池關(guān)于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實(shí)現(xiàn)在軟件開(kāi)發(fā)中,分散于應(yīng)用中多出的功能被稱為橫切關(guān)注點(diǎn)如事務(wù)安全緩存等。 Java 程序媛手把手教你設(shè)計(jì)模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經(jīng)風(fēng)雨慢慢變老,回首走過(guò)的點(diǎn)點(diǎn)滴滴,依然清楚的記得當(dāng)初愛(ài)情萌芽的模樣…… Java 進(jìn)階面試問(wèn)題列表 -...

    chengtao1633 評(píng)論0 收藏0
  • Spring筆記01_下載_概述_監(jiān)聽(tīng)器

    摘要:簡(jiǎn)單來(lái)說(shuō),是一個(gè)輕量級(jí)的控制反轉(zhuǎn)和面向切面的容器框架。變成的支持提供面向切面編程,可以方便的實(shí)現(xiàn)對(duì)程序進(jìn)行權(quán)限攔截,運(yùn)行監(jiān)控等功能。用于反射創(chuàng)建對(duì)象,默認(rèn)情況下調(diào)用無(wú)參構(gòu)造函數(shù)。指定對(duì)象的作用范圍。 1.Spring介紹 1.1 Spring概述 Spring是一個(gè)開(kāi)源框架,Spring是于2003 年興起的一個(gè)輕量級(jí)的Java 開(kāi)發(fā)框架,由Rod Johnson 在其著作Expert...

    reclay 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<