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

Spring核心思想之IOC和AOP

這篇具有很好參考價值的文章主要介紹了Spring核心思想之IOC和AOP。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

IOC和AOP不是Spring提出的,在spring之前就已經(jīng)存在,只不過更偏向于理論化,Spring在技術(shù)層次把這兩個思想做了?常好的實現(xiàn)(Java)。

IOC(Inversion of Control)

什么是IoC?

IoC Inversion of Control (控制反轉(zhuǎn)/反轉(zhuǎn)控制),注意它是?個技術(shù)思想,不是?個技術(shù)實現(xiàn)。
描述的事情:Java開發(fā)領(lǐng)域?qū)ο蟮膭?chuàng)建,管理的問題
傳統(tǒng)開發(fā)?式:?如類A依賴于類B,往往會在類A中new?個B的對象
IoC思想下開發(fā)?式:我們不???去new對象了,?是由IoC容器(Spring框架)去幫助我們實例化對象并且管理它,我們需要使?哪個對象,去問IoC容器要即可。
我們喪失了?個權(quán)利(創(chuàng)建、管理對象的權(quán)利),得到了?個福利(不?考慮對象的創(chuàng)建、管理等?系列事情)
為什么叫做控制反轉(zhuǎn)?
控制:指的是對象創(chuàng)建(實例化、管理)的權(quán)利
反轉(zhuǎn):控制權(quán)交給外部環(huán)境了(spring框架、IoC容器)
Spring核心思想之IOC和AOP

IoC解決了什么問題

IoC解決對象之間的耦合問題
Spring核心思想之IOC和AOP

IoC和DI的區(qū)別

DI:Dependancy Injection(依賴注?)
怎么理解:
IOC和DI描述的是同?件事情,只不過?度不?樣罷了。
Spring核心思想之IOC和AOP

AOP(Aspect oriented Programming)

什么是AOP

AOP: AOPAspect Oriented Programming 的縮寫,意思為面向切面編程,是通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)。AOPOOP 的延續(xù),是軟件開發(fā)中的一個熱點,也是Spring框架中的一個重要內(nèi)容,是函數(shù)式編程的一種衍生范型。利用AOP可以對業(yè)務(wù)邏輯的各個部分進行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。
既然AOP是OOP的延續(xù),我們從OOP說起,OOP全稱Object-Oriented Programming(面向?qū)ο缶幊蹋?。OOP是一種常用的編程范式,它以對象為核心,通過封裝繼承多態(tài)等概念來組織和管理代碼。面向?qū)ο缶幊烫峁┝艘环N結(jié)構(gòu)化和模塊化的方法,使得我們能夠更好地組織和復(fù)用代碼。
OOP是?種垂直繼承體系。
Spring核心思想之IOC和AOP
OOP編程思想可以解決?多數(shù)的代碼重復(fù)問題,但是有?些情況是處理不了的,?如在頂級?類Animal中的多個?法中相同位置出現(xiàn)了重復(fù)代碼,OOP就解決不了。
Spring核心思想之IOC和AOP
橫切邏輯代碼:
Spring核心思想之IOC和AOP
橫切邏輯代碼存在什么問題:

  • 橫切代碼重復(fù)問題
  • 橫切邏輯代碼和業(yè)務(wù)代碼混雜在?起,代碼臃腫,維護不?便

AOP出場,AOP獨辟蹊徑提出橫向抽取機制,將橫切邏輯代碼和業(yè)務(wù)邏輯代碼分離。
Spring核心思想之IOC和AOP
代碼拆分容易,那么如何在不改變原有業(yè)務(wù)邏輯的情況下,悄?聲息的把橫切邏輯代碼應(yīng)?到原有的業(yè)務(wù)邏輯中,達到和原來?樣的效果,這個是?較難的。

AOP在解決什么問題

在不改變原有業(yè)務(wù)邏輯情況下,增強橫切邏輯代碼,根本上解耦合,避免橫切邏輯代碼重復(fù)。

為什么叫做?向切?編程

「切」:指的是橫切邏輯,原有業(yè)務(wù)邏輯代碼我們不能動,只能操作橫切邏輯代碼,所以?向橫切邏輯
「?」:橫切邏輯代碼往往要影響的是很多個?法,每?個?法都如同?個點,多個點構(gòu)成?,有?個?的概念在??。

AOP 的底層實現(xiàn)

實際上,AOP 的底層是通過 Spring 提供的的動態(tài)代理技術(shù)實現(xiàn)的。在運行期間,Spring通過動態(tài)代理技術(shù)動態(tài)的生成代理對象,代理對象方法執(zhí)行時進行增強功能的介入,在去調(diào)用目標對象的方法,從而完成功能的增強。

AOP 的動態(tài)代理技術(shù)

常用的動態(tài)代理技術(shù)

  • JDK 代理 : 基于接口的動態(tài)代理技術(shù)
  • cglib 代理:基于父類的動態(tài)代理技術(shù)
    Spring核心思想之IOC和AOP
JDK 的動態(tài)代理

JDK的動態(tài)代理實現(xiàn)如下:

  1. 創(chuàng)建目標類接口:
public interface TargetInterface {
   public void method();
}
  1. 目標類
public class Target implements TargetInterface {
    @Override
    public void method() {
        System.out.println("Target running....");
    }
}
  1. 動態(tài)代理代碼
Target target = new Target(); //創(chuàng)建目標對象
//創(chuàng)建代理對象
TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance(target.getClass()
.getClassLoader(),target.getClass().getInterfaces(),new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) 
            throws Throwable {
                System.out.println("前置增強代碼...");
                Object invoke = method.invoke(target, args);
                System.out.println("后置增強代碼...");
                return invoke;
            }
        }
);
  1. 調(diào)用代理對象的方法測試驗證:
// 測試,當調(diào)用接口的任何方法時,代理對象的代碼都無序修改
proxy.method();

輸出如下:
Spring核心思想之IOC和AOP

cglib 的動態(tài)代理

cglib 的動態(tài)代理實現(xiàn)如下:

  1. 創(chuàng)建目標類:
public class Target {
  public void method() {
      System.out.println("Target running....");
  }
}
  1. 動態(tài)代理代碼
Target target = new Target(); //創(chuàng)建目標對象
Enhancer enhancer = new Enhancer();   //創(chuàng)建增強器
enhancer.setSuperclass(Target.class); //設(shè)置父類
enhancer.setCallback(new MethodInterceptor() { //設(shè)置回調(diào)
    @Override
    public Object intercept(Object o, Method method, Object[] objects, 
    MethodProxy methodProxy) throws Throwable {
        System.out.println("前置代碼增強....");
        Object invoke = method.invoke(target, objects);
        System.out.println("后置代碼增強....");
        return invoke;
    }
});
Target proxy = (Target) enhancer.create(); //創(chuàng)建代理對象
  1. 調(diào)用代理對象的方法測試
//測試,當調(diào)用接口的任何方法時,代理對象的代碼都無序修改
proxy.method();

默認情況下,Spring會根據(jù)被代理對象是否實現(xiàn)接?來選擇使?JDK還是CGLIB。當被代理對象沒有實現(xiàn)任何接?時,Spring會選擇CGLIB。當被代理對象實現(xiàn)了接?,Spring會選擇JDK官?的代理技術(shù),不過我們可以通過配置的?式,讓Spring強制使?CGLIB。

AOP 相關(guān)概念

Spring 的 AOP 實現(xiàn)底層就是對上面的動態(tài)代理的代碼進行了封裝,封裝后我們只需要對需要關(guān)注的部分進行代碼編寫,并通過配置的方式完成指定目標的方法增強。

后續(xù)我會講解AOP的操作,在此之前我們必須理解 AOP 的相關(guān)術(shù)語,常用的術(shù)語如下:

  • Target(目標對象):代理的目標對象
  • Proxy (代理):一個類被 AOP 織入增強后,就產(chǎn)生一個結(jié)果代理類
  • Joinpoint(連接點):所謂連接點是指那些被攔截到的點。在spring中,這些點指的是方法,因為spring只支持方法類型的連接點
  • Pointcut(切入點):所謂切入點是指我們要對哪些 Joinpoint 進行攔截的定義
  • Advice(通知/ 增強):所謂通知是指攔截到 Joinpoint 之后所要做的事情就是通知
  • Aspect(切面):是切入點和通知(引介)的結(jié)合
  • Weaving(織入):是指把增強應(yīng)用到目標對象來創(chuàng)建新的代理對象的過程。spring采用動態(tài)代理織入,而AspectJ采用編譯期織入和類裝載期織入

常見應(yīng)用場景

  1. 日志記錄:AOP可用于在方法調(diào)用前后記錄日志。這對于系統(tǒng)的調(diào)試、錯誤排查以及性能分析都非常有用。通過在切面中編寫日志記錄邏輯,可以捕獲方法的參數(shù)、返回值和執(zhí)行時間等信息,并將其記錄到日志文件或其他目標中。
  2. 安全性控制:AOP可用于實現(xiàn)安全性控制,如身份驗證、權(quán)限驗證和訪問控制等。通過在切面中編寫安全性邏輯,可以在方法調(diào)用前檢查用戶的身份和權(quán)限,從而確保只有合法用戶才能執(zhí)行敏感操作。
  3. 事務(wù)管理:AOP廣泛應(yīng)用于事務(wù)管理,確保數(shù)據(jù)庫操作的一致性和完整性。通過在切面中應(yīng)用事務(wù)邏輯,可以在方法調(diào)用前后自動開啟、提交或回滾事務(wù)。這樣,開發(fā)者無需手動編寫事務(wù)管理代碼,而是將關(guān)注點集中在業(yè)務(wù)邏輯上。
  4. 緩存管理:AOP可用于實現(xiàn)緩存管理,提高系統(tǒng)的性能和響應(yīng)速度。通過在切面中添加緩存邏輯,可以在方法執(zhí)行前檢查緩存是否包含所需數(shù)據(jù),避免執(zhí)行相同的方法調(diào)用。如果緩存中存在數(shù)據(jù),則直接返回緩存數(shù)據(jù),減少對底層存儲系統(tǒng)的訪問。
  5. 異常處理:AOP可用于捕獲和處理方法調(diào)用過程中的異常情況。通過在切面中編寫異常處理邏輯,可以記錄異常信息、發(fā)送通知或執(zhí)行特定的異常處理策略。這有助于更好地理解和響應(yīng)系統(tǒng)中發(fā)生的異常情況。
  6. 性能監(jiān)控:AOP可用于監(jiān)控方法的性能指標,以便進行性能分析和優(yōu)化。通過在切面中添加性能監(jiān)控邏輯,可以記錄方法的執(zhí)行時間、調(diào)用次數(shù)和資源消耗等指標。這樣可以識別系統(tǒng)中的性能瓶頸,并采取相應(yīng)的優(yōu)化措施。

總之,Spring AOP提供了一種模塊化的方式來處理橫切關(guān)注點,使開發(fā)者能夠更好地關(guān)注核心業(yè)務(wù)邏輯。通過在切面中編寫特定的邏輯,可以在方法調(diào)用的不同階段插入通用的橫切行為,提高代碼的可維護性和重用性。

本文內(nèi)容到此結(jié)束了,
如有收獲歡迎點贊??收藏??關(guān)注??,您的鼓勵是我最大的動力。
如有錯誤?疑問??歡迎各位指出。
主頁:共飲一杯無的博客匯總?????

保持熱愛,奔赴下一場山海。??????文章來源地址http://www.zghlxwxcb.cn/news/detail-492639.html

到了這里,關(guān)于Spring核心思想之IOC和AOP的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Spring核心設(shè)計思想

    Spring核心設(shè)計思想

    目錄 前言: Spring是什么 什么是IoC 傳統(tǒng)開發(fā)思想 IoC開發(fā)思想 Spring IoC 什么是DI 小結(jié): ? ? 官網(wǎng)中提出:Spring makes programming Java quicker, easier, and safer for everybody. Spring’s focus on speed, simplicity, and productivity has made it the?world\\\'s most popular Java framework. ? ? Spring 使編程 Java 對每個人來

    2023年04月17日
    瀏覽(21)
  • Spring核心思想

    Spring核心思想

    通常所說的 Spring 指的是 Spring Framework(Spring 框架) Spring 是包含了眾多工具方法的 IOC 容器 將眾多工具方法的 IOC 容器拆解為三部分 眾多工具方法 IOC 容器 眾多工具方法 將扳手??理解為一個工具 扳手??可以用來打螺絲(方法) 扳手??可以用來敲核桃(方法) … 容器 將水杯理解為

    2024年02月08日
    瀏覽(19)
  • Spring 核心概念之一 IoC

    歡迎來到本篇文章!通過上一篇什么是 Spring?為什么學它?的學習,我們知道了 Spring 的基本概念,知道什么是 Spring,以及為什么學習 Spring。 今天,這篇就來說說 Spring 中的核心概念之一 IoC。 IoC 這個概念對于初學者來說還真不是很好理解,我就是那個理解不了的初學者。

    2024年02月07日
    瀏覽(19)
  • Spring 核心與設(shè)計思想

    ??作者:銀河罐頭 ??系列專欄:JavaEE ?? “種一棵樹最好的時間是十年前,其次是現(xiàn)在” 通常所說的 Spring 指的是 Spring Framework(Spring 框架)。 Spring 是包含多種工具方法的 IoC 容器。 IoC(Inversion of Control): 控制反轉(zhuǎn) \\\"控制反轉(zhuǎn)\\\"又是什么意思? 下面以一個程序來舉例。 假如我

    2024年02月02日
    瀏覽(24)
  • 【Spring】核心與設(shè)計思想

    【Spring】核心與設(shè)計思想

    ?哈嘍,哈嘍,大家好~ 我是你們的老朋友: 保護小周??? 談起Java 圈子里的框架,最年長最耀眼的莫過于 Spring 框架啦,如今已成為最流行、最廣泛使用的Java開發(fā)框架之一。不知道大家有沒有在使用 Spring 框架的時候思考過這些問題, 什么是框架?Spring 是什么?如何理解

    2024年02月08日
    瀏覽(28)
  • Spring核心容器IOC案例講解,帶你理解IOC

    Universe Infinity inc. 什么是IOC容器,先把IOC給忽略到,其實就是個容器。 什么?容器又是個啥玩意?容器是用來放東西的東西啊。 各個領(lǐng)域都喜歡起一些專業(yè)術(shù)語,顯得很高級。給你講IOC是不是很高級,給你講Map是不是就明白了。 bean對象最終存儲在spring容器中,在spring源碼底

    2024年01月24日
    瀏覽(20)
  • Spring框架核心與設(shè)計思想

    Spring框架核心與設(shè)計思想

    我們一般所說的Spring指的是Spring Framework(Spring 框架),它是一個開源的框架,Spring支持廣泛的應(yīng)用場景,它可以讓Java企業(yè)級的應(yīng)用程序開發(fā)變得更簡單,官方一點的回答:spring是J2EE應(yīng)用程序框架,是輕量級的IoC和AOP的容器框架,主要是針對javaBean的生命周期進行管理的輕量級

    2023年04月15日
    瀏覽(35)
  • 【Spring】學習Spring需要掌握的核心設(shè)計思想

    【Spring】學習Spring需要掌握的核心設(shè)計思想

    目錄 一、Spring是什么 二、什么是IoC容器 1、什么是容器 2、什么是IoC? ?3、Spring IoC 4、DI(依賴注入) 4.1、IoC和DI的區(qū)別 5、 DL(依賴查找) 我們通常所說的Spring指的是Spring Framework(Framework的意思就是框架),它是一個開源的框架,有著龐大的社區(qū),這就是它之所以能長久不

    2024年02月14日
    瀏覽(31)
  • Spring 核心之 IOC 容器學習二

    Annotation 的前世今生 定位 Bean 掃描路徑 讀取 Annotation 元數(shù)據(jù) 掃描指定包并解析為 BeanDefinition

    2024年01月19日
    瀏覽(24)
  • Spring 核心之 IOC 容器學習一

    Spring 核心之 IOC 容器學習一

    1、BeanFactory 其中 BeanFactory 作為最頂層的一個接口類,它定義了 IOC 容器的基本功能規(guī)范,BeanFactory 有三個重要的子類:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory。但是從類圖中我們可以發(fā)現(xiàn)最終的默認實現(xiàn)類是 DefaultListableBeanFactory,它實現(xiàn)了所有的接口。 那

    2024年01月19日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包