国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

spring的AOP和IOC的原理

這篇具有很好參考價(jià)值的文章主要介紹了spring的AOP和IOC的原理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、spring的ioc與aop原理

二、代理模式:

三、靜態(tài)代理

四、動(dòng)態(tài)代理

五、實(shí)際的操作

六、動(dòng)態(tài)代理的實(shí)現(xiàn):

七、什么是AOP

八、主流的AOP框架:

九、術(shù)語(yǔ):

十、通知的五種類(lèi)型:

十一、AOP的優(yōu)點(diǎn):

十二、AOP開(kāi)發(fā)流程


一、spring的ioc與aop原理

  • 核心概念:控制反轉(zhuǎn)(IOC)/(DI),面向切面(AOP)

????????IOC和DI:本質(zhì)相同只是不同的角度描述而已。

????????IOC:

????????????????使用Spring框架之后對(duì)象的實(shí)例不再由調(diào)用者來(lái)創(chuàng)建,而是直接由Spring容器來(lái)創(chuàng)建,Spring容器會(huì)負(fù)責(zé)控制程序之間的關(guān)系,而不是調(diào)用者的程序代碼直接控制??刂茩?quán)由應(yīng)用程序轉(zhuǎn)移到Spring容器,控制權(quán)發(fā)生了反轉(zhuǎn)。

????????DI:

????????????????從Spring容器的角度來(lái)看,Spring容器負(fù)責(zé)被依賴(lài)對(duì)象賦值給調(diào)用者的長(zhǎng)遠(yuǎn)變量,這相當(dāng)于為調(diào)用者注入了它依賴(lài)的實(shí)例,這就是Spring的依賴(lài)注入。

aop(面向切面編程)?原理:
????由于組件是在運(yùn)行期間組裝、調(diào)用的,因此Spring即可以在執(zhí)行完A組件后執(zhí)行組件B,也可以執(zhí)行完A組件后執(zhí)行B組件前再執(zhí)行C組件。也就是說(shuō),將C組件插入到A組件與B組件之間。
????如果把A、B、C看成是切面,這就是AOP、面向切面的編程。面向切面編程的思想就是在執(zhí)行某些代碼前執(zhí)行另外的代碼,使程序更靈活、擴(kuò)展性更好,可以隨便地添加、刪除某些功能。
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-445723.html

spring的AOP和IOC的原理
  • 二、代理模式:

    • 概念
      • 是程序設(shè)計(jì)的一種
      • 代理模式就是為其他的對(duì)象提供一種代理以控制這個(gè)對(duì)象的訪問(wèn)某些情況下每個(gè)對(duì)象不適合或者不能直接引用另一個(gè)對(duì)象二代理對(duì)象可以在客戶(hù)端與目標(biāo)對(duì)象之間起到中介的作用
    • 組成:
      spring的AOP和IOC的原理
      1. 抽象角色:【行為】
        • 通過(guò)接口或者抽象類(lèi)聲明真實(shí)角色的實(shí)現(xiàn)(業(yè)務(wù)方法)
      2. 代理對(duì)象【連接真實(shí)角色的橋梁】
        • 實(shí)現(xiàn)抽象角色,是真實(shí)角色的代理,通過(guò)真實(shí)的?角色的業(yè)務(wù)邏輯方法,來(lái)實(shí)現(xiàn)抽象方法,附加自己的操作。
      3. 真實(shí)角色【需要被代理的對(duì)象】
        • 實(shí)現(xiàn)抽象角色,定義鎮(zhèn)海寺的角色搜要實(shí)現(xiàn)的業(yè)務(wù)邏輯,提供代理角色調(diào)用
  • 三、靜態(tài)代理

    • 由我們創(chuàng)建或者工具生成的代理,字編譯代理類(lèi),所謂的驚濤代理就是在程序執(zhí)行之前九已經(jīng)存愛(ài)的代理類(lèi),代理類(lèi)和委托類(lèi)的關(guān)系在運(yùn)行之前就已經(jīng)確定了。
  • 四、動(dòng)態(tài)代理

    • 動(dòng)態(tài)代理憑借靈活性子框架中應(yīng)用非常的廣泛,是代理模式的一種
    • 是在實(shí)現(xiàn)階段不關(guān)心代理類(lèi),而是在運(yùn)行階段才指定哪一個(gè)對(duì)象,這就意味著不關(guān)心代理類(lèi)是如何實(shí)現(xiàn)的,不需要再寫(xiě)代理類(lèi)。
  • 五、實(shí)際的操作

    ???????
    • 代理類(lèi)中沒(méi)有真實(shí)的實(shí)現(xiàn)接口,而是調(diào)用目標(biāo)類(lèi)的租房rent方法。
  • 六、動(dòng)態(tài)代理的實(shí)現(xiàn):

    • 在程序的執(zhí)行過(guò)程中,使用JDK的反射機(jī)制,創(chuàng)建代理類(lèi)對(duì)象,并動(dòng)態(tài)的指定要代理的目標(biāo)類(lèi)。
    • 它可以實(shí)現(xiàn)不用寫(xiě)代理類(lèi)的實(shí)現(xiàn)就可以創(chuàng)建代理類(lèi)對(duì)象。
    • JDK的動(dòng)態(tài)代理是就與反射?實(shí)現(xiàn)的,使用JDK中接口和類(lèi)實(shí)現(xiàn)代理對(duì)象的創(chuàng)建。
    • JDk動(dòng)態(tài)代理必須實(shí)現(xiàn)三個(gè)類(lèi)?Method ,Proxy,InovcationHandler
  • 七、什么是AOP

    • 面向切面編程,和OOP(面向?qū)ο缶幊蹋╊?lèi)似,一也是一種編程思想。
    • AOP的?作用【橫向抽取機(jī)制】
      • AOP采取橫向抽取【動(dòng)態(tài)代理】,對(duì)啊了傳統(tǒng)縱向繼承的重復(fù)性代碼,器應(yīng)用主要體現(xiàn)在事務(wù)處理,日志管理,權(quán)限管理,異常處理等方面。
      • 主要作用:
        • 分離功能性需求和非功能性需求,是開(kāi)發(fā)人員可以集中?的處理某一個(gè)關(guān)注點(diǎn)或者橫切邏輯
        • 減少對(duì)業(yè)務(wù)代碼的侵入
        • 增強(qiáng)代碼的可讀性和可維護(hù)性【簡(jiǎn)單來(lái)說(shuō),AOP的作用就是保證開(kāi)發(fā)者在不修改源代碼的前提下,為系統(tǒng)業(yè)務(wù)組件添加某種通用的功能,AOP就是代理模式的經(jīng)典應(yīng)用】
  • 八、主流的AOP框架:

    • Spring?AOP?
      • 基于AOP編程模式的一個(gè)框架,能夠有效的減少系統(tǒng)?間的代碼重復(fù),達(dá)到松耦合的目的。
      • 純java實(shí)現(xiàn),不需要專(zhuān)門(mén)的編譯器和類(lèi)加載器,在運(yùn)行期間通過(guò)代理方式象目標(biāo)類(lèi)植入增強(qiáng)的代碼。
    • ASpectJ
      • 基于java語(yǔ)言的AOP框架,提供專(zhuān)門(mén)的編譯器,在編譯時(shí)提供橫向代碼的植入。
  • 九、術(shù)語(yǔ):

    • Target:目標(biāo)類(lèi)【需要被代理的類(lèi)】
    • Joinpoint:連接點(diǎn)【指哪些可能被攔截的方法】
    • PointCut:切入點(diǎn)【已經(jīng)被增強(qiáng)的連接點(diǎn)】
    • Advice:通知/增強(qiáng)【增強(qiáng)代碼(前置通知,后置通知,返回通知,拋出異常通知,環(huán)繞通知)】
    • WeaVing:植入【把增強(qiáng)的方法,應(yīng)用到目標(biāo)的Target來(lái)創(chuàng)建新的代理對(duì)象Proxy的過(guò)程】
    • Proxy:代理類(lèi)
    • Aspect:切面平【是切入點(diǎn)+通知的結(jié)合】
  • 十、通知的五種類(lèi)型:

    • before:前置通知
    • after:后置通知
    • after-returning:返回后通知
    • after-throwing:拋出異常后通知
    • around:環(huán)繞通知
  • 十一、AOP的優(yōu)點(diǎn):

    • 是Spring的核心之一,使用AOP來(lái)優(yōu)化編程,在Spring框架中使用AOP的主要優(yōu)勢(shì):
      1. 提供聲明式企業(yè)服務(wù):
        • 特別是作為EJB聲明式服務(wù)的替代品,最重要?的是這種事務(wù)是聲明式事務(wù)。
      2. 自定義切面:
        • 允許用戶(hù)實(shí)現(xiàn)自定義切面。在默寫(xiě)不適應(yīng)OOP編程的場(chǎng)景中嗎,采用AOP來(lái)補(bǔ)充
      3. 耦合度降低:
        • 可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而實(shí)業(yè)務(wù)邏輯的各個(gè)部分之間的耦合度降低,提高程序的可重用性,同時(shí)也提高了開(kāi)發(fā)。
  • 十二、AOP開(kāi)發(fā)流程

    <bean id ="userService" class ="com.shang.aopdemo02.UserServiceImpl" ></bean>
    <bean id="AOPAdvice" class="com.shang.rentdemo.UserAop"></bean>
    <aop:config>
    <aop:pointcut id="pointcut" expression="execution(* com.shang.aopdemo02.*.add*(..))"/>
    <aop:aspect ref="AOPAdvice">
    <aop:before pointcut-ref="pointcut" method="beforeAdvice" ></aop:before>
    <aop:after pointcut-ref="pointcut" method="afterAdvice"></aop:after>
    <aop:after-returning pointcut-ref="pointcut" method="afterReturnAdvice" ></aop:after-returning>
    <aop:around pointcut-ref="pointcut" method="aroundAdvice"></aop:around>
    <aop:after-throwing pointcut-ref="pointcut" method="afterThrowAdvice" ></aop:after-throwing>
    </aop:aspect>
    </aop:config>
    1. 導(dǎo)入依賴(lài)
    2. 在xml文件中加入
      1. < ? xml version= "1.0" encoding= "UTF-8" ? >
      2. <beans xmlns="Index of /schema/beans"
      3. ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      4. ? ? xmlns:aop="Index of /schema/aop"
      5. ? ? xsi:schemaLocation="Index of /schema/beans
      6. ? ? http://www.springframework.org/schema/beans/spring-beans-xxx.xsd
      7. ? ? Index of /schema/aop
      8. ? ? http://www.springframework.org/schema/aop/spring-aop-xxx.xsd ">
      9. </beans>
    3. AOP的增強(qiáng)類(lèi)【before after 等方法】
    4. 實(shí)現(xiàn)的第一種方式:在xml自定義切面實(shí)現(xiàn)
    5. 實(shí)現(xiàn)的第二種方式:注解
      1. 在xml中開(kāi)啟注解和掃描包
      2. 在方法的上面加上注解
        1. @Aspect:定義一個(gè)切面
        2. @Pointcut:用于定義一個(gè)切入點(diǎn)
        3. @Before:定義前置通知
        4. @After:定義最終通知
        5. @AfterReturning:定義后置通知
        6. @Around:定義環(huán)繞通知
        7. @AfterThrowing:定義拋出通知

到了這里,關(guān)于spring的AOP和IOC的原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring 使用注解開(kāi)發(fā)、代理模式、AOP

    在Spring4之后,要使用注解開(kāi)發(fā),必須要保證AOP的包導(dǎo)入了 項(xiàng)目搭建: 在配置文件中導(dǎo)入約束,增加注解支持 bean 實(shí)體類(lèi) @Component 注解 xml配置 測(cè)試: 屬性如何注入 衍生的注解 @Component 有幾個(gè)衍生的注解,我們?cè)趙eb開(kāi)發(fā)中,會(huì)按照MVC三層架構(gòu)分層 dao層: @Repository 等價(jià)于poj

    2024年02月13日
    瀏覽(24)
  • JDK 動(dòng)態(tài)代理(Spring AOP 的原理)(面試重點(diǎn))

    JDK 動(dòng)態(tài)代理(Spring AOP 的原理)(面試重點(diǎn))

    ????????也叫委托模式.定義:為其他對(duì)象提供?種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn).它的作?就是通過(guò)提供?個(gè)代理類(lèi),讓我們 在調(diào)??標(biāo)?法的時(shí)候,不再是直接對(duì)?標(biāo)?法進(jìn)?調(diào)?,?是通過(guò)代理類(lèi)間接調(diào)?,在某些情況下,?個(gè)對(duì)象不適合或者不能直接引?另?個(gè)對(duì)象,?代

    2024年01月22日
    瀏覽(40)
  • B057-spring增強(qiáng) 依賴(lài)注入 AOP 代理模式 創(chuàng)建Bean

    B057-spring增強(qiáng) 依賴(lài)注入 AOP 代理模式 創(chuàng)建Bean

    DI:依賴(lài)注入 環(huán)境準(zhǔn)備,即寫(xiě)一個(gè)spring測(cè)試,見(jiàn)工程 構(gòu)造器注入 即使用構(gòu)造器來(lái)給Bean的對(duì)象的屬性賦值 MyBean OtherBean SpringTest-Context.xml SpringTest setter方法注入 即用setter方法給bean對(duì)象的屬性賦值 MyBean OtherBean SpringTest-Context.xml SpringTest AOP 概念 事務(wù)管理:比如可以抽取try catch的

    2024年02月12日
    瀏覽(24)
  • Spring IOC & AOP

    Spring IOC & AOP

    IOC,全程Inversion of Control(控制反轉(zhuǎn)) 通過(guò)控制反轉(zhuǎn)(創(chuàng)建對(duì)象的權(quán)限交給框架,所以叫反轉(zhuǎn))創(chuàng)建的對(duì)象被稱(chēng)為 Spring Bean ,這個(gè)Bean和用new創(chuàng)建出來(lái)的對(duì)象是沒(méi)有任何區(qū)別的。 官方解釋?zhuān)篠pring 通過(guò) IoC 容器來(lái)管理所有 Java 對(duì)象的實(shí)例化和初始化,控制對(duì)象與對(duì)象之間的依賴(lài)

    2024年02月16日
    瀏覽(19)
  • Spring5系列學(xué)習(xí)文章分享---第三篇(AOP概念+原理+動(dòng)態(tài)代理+術(shù)語(yǔ)+Aspect+操作案例(注解與配置方式))

    Spring5系列學(xué)習(xí)文章分享---第三篇(AOP概念+原理+動(dòng)態(tài)代理+術(shù)語(yǔ)+Aspect+操作案例(注解與配置方式))

    開(kāi)篇: 歡迎再次來(lái)到 Spring 5 學(xué)習(xí)系列!在這個(gè)博客中,我們將深入研究 Spring 框架的AOP概念+原理+動(dòng)態(tài)代理+術(shù)語(yǔ)+Aspect+操作案例(注解與配置方式)。 概念 什么是AOP (1)面向切面編程(方面),利用 AOP 可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得 業(yè)務(wù)邏輯各部分之間的

    2024年01月24日
    瀏覽(28)
  • 什么是 AOP?對(duì)于 Spring IoC 和 AOP 的理解?

    什么是 AOP?對(duì)于 Spring IoC 和 AOP 的理解?

    AOP(Aspect-Oriented Programming) ,即 面向切面編程, 它與 OOP( ObjectOriented Programming, 面向?qū)ο缶幊? 相輔相成,提供了與OOP 不同的抽象軟件結(jié)構(gòu)的視角 在 OOP 中, 我們以 類(lèi)(class) 作為我們的基本單元 而 AOP 中的基本單元是 Aspect(切面) IOC(Inverse of Control:控制反轉(zhuǎn)) 是一種設(shè)計(jì)思想,

    2024年02月12日
    瀏覽(31)
  • Spring核心思想之IOC和AOP

    Spring核心思想之IOC和AOP

    IOC和AOP不是Spring提出的,在spring之前就已經(jīng)存在,只不過(guò)更偏向于理論化,Spring在技術(shù)層次把這兩個(gè)思想做了?常好的實(shí)現(xiàn)(Java)。 什么是IoC? IoC Inversion of Control (控制反轉(zhuǎn)/反轉(zhuǎn)控制),注意它是?個(gè) 技術(shù)思想 ,不是?個(gè)技術(shù)實(shí)現(xiàn)。 描述的事情 :Java開(kāi)發(fā)領(lǐng)域?qū)ο蟮膭?chuàng)建,

    2024年02月09日
    瀏覽(22)
  • 【Java面試】Spring中的IOC和AOP

    IOC:控制反轉(zhuǎn)也叫依賴(lài)注入。利用了工廠模式 將對(duì)象交給容器管理,你只需要在spring配置文件總配置相應(yīng)的bean,以及設(shè)置相關(guān)的屬性,讓spring容器來(lái)生成類(lèi)的實(shí)例對(duì)象以及管理對(duì)象。在spring容器啟動(dòng)的時(shí)候,spring會(huì)把你在配置文件中配置的bean都初始化好,然后在你需要調(diào)用的

    2024年02月10日
    瀏覽(26)
  • 【Java學(xué)習(xí)】 Spring的基礎(chǔ)理解 IOC、AOP以及事務(wù)

    【Java學(xué)習(xí)】 Spring的基礎(chǔ)理解 IOC、AOP以及事務(wù)

    ? ? 官網(wǎng):?https://spring.io/projects/spring-framework#overview ? ??官方下載工具:?https://repo.spring.io/release/org/springframework/spring/ ? ? github下載:?https://github.com/spring-projects/spring-framework ?? ?maven依賴(lài): 1.spring全家桶的結(jié)構(gòu)構(gòu)圖: ?? ??? ? ? ? 最下邊的是測(cè)試單元? ?其中spring封裝

    2024年02月09日
    瀏覽(28)
  • 深入解析Spring的IOC與AOP及其在項(xiàng)目中的應(yīng)用

    在現(xiàn)代的軟件開(kāi)發(fā)中,為了提高代碼的可維護(hù)性、可擴(kuò)展性以及降低代碼的耦合度,使用設(shè)計(jì)模式和面向切面編程(AOP)成為了程序員們常用的技術(shù)手段。Spring作為一個(gè)優(yōu)秀的Java開(kāi)發(fā)框架,提供了IOC和AOP兩個(gè)核心特性,極大地簡(jiǎn)化了開(kāi)發(fā)工作。本文將深入探討Spring的IOC和AO

    2024年02月13日
    瀏覽(35)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包