国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring入門IOC和AOP學習筆記

wenyiweb / 2037人閱讀

摘要:入門和學習筆記概述框架的核心有兩個容器作為超級大工廠,負責管理創建所有的對象,這些對象被稱為。中的一些術語切面切面組織多個,放在切面中定義。

Spring入門IOC和AOP學習筆記 概述

Spring框架的核心有兩個:

Spring容器作為超級大工廠,負責管理、創建所有的Java對象,這些Java對象被稱為Bean。

Spring容器管理容器中Bean之間的依賴關系,使用一種叫做“依賴注入”的方式來管理bean之間的依賴關系。

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

IOC

Inversion Of Control,控制反轉,也可以叫依賴注入。A對象需要調用B對象的方法的情景,這種情形稱為依賴,即A對象依賴B對象。使用依賴注入不僅可以為Bean對象注入普通的屬性值,還可以注入其他Bean引用。通過這種依賴注入,Java EE應用中的各種組件不需要以硬編碼方式耦合在一起,甚至無需使用工廠模式。當某個Java實例需要其他Java實例時,系統自動提供所需要的實例,無需程序顯式獲取。

好處

先來說說傳統使用java實例的不足,一般有兩種方式:

通過new關鍵字實例化一個對象;

通過工廠模式生產一個實例對象;

第一種方式必然導致調用者和被依賴對象存在硬編碼耦合,非常不利于項目升級的維護;第二種比第一種好很多,但是調用組件需要主動通過工廠去獲取被依賴的對象,這就會帶來調用組件與被依賴工廠的耦合。

那么IOC有什么好處呢?

調用者無需主動獲取被依賴的對象,只要被動接受Spring容器為調用者的成員變量即可。總體來說就是主動變為被動,所以被稱為控制反轉。

場景

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

設值注入:IoC容器使用成員變量的setter方法來注入被依賴對象;

構造注入:IoC容器通過構造器來注入被依賴對象;

建議采用設值注入為主,構造注入為輔的注入策略。對于依賴關系無需變化的注入,盡量采用構造注入;而其他依賴關系的注入,則考慮采用設值注入。

使用IoC容器的三個基本要點:

應用程序的各組件面向接口編程,這樣就可以將組件之間的耦合關系提升到接口層次,從而有有利于項目后期的發展;

應用程序的各組件不再由程序主動創建,而是由Spring容器來負責產生并初始化;

Spring采用配置文件或注解來管理Bean的實現類、依賴關系,Spring容器則根據配置文件或注解,利用反射來創建實例,并為之注入依賴關系。

AOP

Aspect Oriented Programming,面向切面編程,用于在模塊化方面的橫切關注點。AOP和OOP(Object Oriented Programming)互為補充,可以這么理解:面向對象編程是從靜態角度縱向考慮程序結構,面向切面編程則是從動態角度橫向考慮運行過程。比如一個日記記錄的功能,代碼往往水平的散落在所有對象中,與被散布的對象的核心功能沒什么關系,這種散布在各個對象中的無關代碼被稱為“橫切代碼”,在OOP的設計中,它導致了大量代碼的重復,從而不利于各個模塊的復用。

簡單的說,它是一個攔截器可以攔截一些過程,當一個方法執行,Spring AOP可以攔截一個方法的執行,在這個方法執行的前后添加一些功能。

AOP中的一些術語

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

連接點(JoinPoint):程序執行過程中明確的點,如方法的調用,或者異常的拋出,在Spring AOP中,連接點總是方法的調用。

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

切入點(Pointcut):可以插增強處理的連接點。當某個連接點滿足指定要求時,該連接點將被添加增強處理(Advice),該連接點也就變成了切入點。

以一個bean配置為例:


        
        
            
            
            
        
    

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

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

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

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

還有一些術語:

引入:將方法或字段添加到被處理的類中。Spring允許將新的接口引入到任何被處理的對象中,例如,你可以使用一個引入,使任何對象實現isModify接口,以此來簡化緩存。

目標對象:被AOP框架增強處理的對象。如果AOP采用的是動態AOP實現,那么該對象就是一個被代理的對象;

AOP代理:AOP框架創建的對象,也可以是cglib代理,代理就是堆目標對象的加強。

織入(Weaving):將增強處理添加到目標對象中,并創建一個被增強的對象的過程就是織入。Spring和其他純javaAOP框架一樣,在運行時完成織入。

使用場景

日志記錄、審計、聲明式事務、安全性和緩存等。

AspectJ和Spring AOP的區別

正好代表了實現AOP的兩種方式:

AspectJ是靜態實現AOP的,即在編譯階段對程序進行修改,需要特殊的編譯器,具有較好的性能;

Spring AOP是動態實現AOP的,即在運行階段動態生成AOP代理,純java實現,因此無需特殊的編譯器,但是通常性能較差。

目前Spring已經對AspectJ進行了很好的集成。

Spring實現AOP的方式

基于注解的“零配置”方式:使用@Aspect、@Pointcut等注解標注切入點和增強處理;

基于XML配置文件的管理方式:使用Spring配置文件來定義切入點和增強處理;

Spring AOP的動態代理

所謂的動態代理就是說AOP框架不會去修改字節碼,而是在內存中臨時為方法生成一個AOP對象,這個AOP對象包含了目標對象的全部方法,并且在特定的切點做了增強處理,并回調原對象的方法。

Spring AOP中的動態代理主要有兩種方式,JDK動態代理CGLIB動態代理。JDK動態代理通過反射來接收被代理的類,并且要求被代理的類必須實現一個接口。JDK動態代理的核心是InvocationHandler接口和Proxy類。

如果目標類沒有實現接口,那么Spring AOP會選擇使用CGLIB來動態代理目標類。CGLIB(Code Generation Library),是一個代碼生成的類庫,可以在運行時動態的生成某個類的子類,注意,CGLIB是通過繼承的方式做的動態代理,因此如果某個類被標記為final,那么它是無法使用CGLIB做動態代理的。

學習路徑

構建AOP和IOC的demo;

安裝spring工具套件STS;

使用無注解方式進行AOP;

使用xml配置方式進行AOP;

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69279.html

相關文章

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

    摘要:構造函數注入通過調用類的構造函數,將接口實現類通過構造函數變量傳入。而在中,其使用橫切技術,將這類代碼從原屬的封裝對象中提取出來,封裝到一個可重用模塊中,稱為。 最近實習用到Spring的開發框架,但是之前沒有接觸過,因此希望利用網上的資源來學習以下。 Spring官方給出了非常全面的介紹,非常適合我這種完全的小白……在這一系列學習中,我閱讀的主要資源是5.1.2 Reference ...

    mindwind 評論0 收藏0
  • 慕課網_《Spring入門篇》學習總結

    摘要:入門篇學習總結時間年月日星期三說明本文部分內容均來自慕課網。主要的功能是日志記錄,性能統計,安全控制,事務處理,異常處理等等。 《Spring入門篇》學習總結 時間:2017年1月18日星期三說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://git...

    Ververica 評論0 收藏0
  • Java深入-框架技巧

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

    chengtao1633 評論0 收藏0
  • Spring筆記01_下載_概述_監聽器

    摘要:簡單來說,是一個輕量級的控制反轉和面向切面的容器框架。變成的支持提供面向切面編程,可以方便的實現對程序進行權限攔截,運行監控等功能。用于反射創建對象,默認情況下調用無參構造函數。指定對象的作用范圍。 1.Spring介紹 1.1 Spring概述 Spring是一個開源框架,Spring是于2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert...

    reclay 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<