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

【Spring】一文帶你吃透AOP面向切面編程技術(shù)(上篇)

這篇具有很好參考價(jià)值的文章主要介紹了【Spring】一文帶你吃透AOP面向切面編程技術(shù)(上篇)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

aop聲明切面,spring,spring,java,前端

個(gè)人主頁: 幾分醉意的CSDN博客_傳送門

??AOP概念

什么是AOP?

AOP(Aspect Orient Programming):面向切面編程

Aspect:表示切面,給業(yè)務(wù)方法增加的功能,叫做切面。切面一般都是非業(yè)務(wù)功能,而且切面功能一般都是可以復(fù)用的。例如日志功能,事務(wù)功能,權(quán)限檢查,參數(shù)檢查,統(tǒng)計(jì)信息等等。

Orient:面向,對著

Programming:編程。

怎么理解面向切面編程?
以切面為核心設(shè)計(jì)開發(fā)你的應(yīng)用。1)設(shè)計(jì)項(xiàng)目時(shí),找出切面的功能。2)安排切面的執(zhí)行時(shí)間,執(zhí)行的位置。

?AOP作用

1. 讓切面功能復(fù)用
2. 讓開發(fā)人員專注業(yè)務(wù)邏輯。提高開發(fā)效率
3. 實(shí)現(xiàn)業(yè)務(wù)功能和其他非業(yè)務(wù)功能解耦合。
4. 給存在的業(yè)務(wù)方法,增加功能,不用修改原來的代碼

?AOP術(shù)語

AOP中重要的三個(gè)要素:Aspect,Pointcut,Advice.這個(gè)概念的理解是:在Advice的時(shí)間,在Pointcut的位置, 執(zhí)行Aspect。

  1. Aspect:切面,給業(yè)務(wù)方法增加的功能。

  2. JoinPoint:連接點(diǎn),連接切面的業(yè)務(wù)方法。在這個(gè)業(yè)務(wù)方法執(zhí)行時(shí),會同時(shí)執(zhí)行切面的功能。

  3. Pointcut:切入點(diǎn),是一個(gè)或多個(gè)連接點(diǎn)集合。表示這些方法執(zhí)行時(shí),都能增加切面的功能。表示切面執(zhí)行的位置。

  4. target:目標(biāo)對象,給那個(gè)對象增加切面的功能,這個(gè)對象就是目標(biāo)對象。

  5. Advice:通知(增強(qiáng)),表示切面的執(zhí)行時(shí)間。在目標(biāo)方法之前執(zhí)行切面,還是目標(biāo)方法之后執(zhí)行切面。

AOP是一個(gè)動(dòng)態(tài)的思想。在程序運(yùn)行期間,創(chuàng)建代理(ServcieProxy),使用代理執(zhí)行方法時(shí),增加切面的功能。這個(gè)代理對象是存在內(nèi)存中的。

?什么時(shí)候需要用AOP

你要給某些方法增加相同的一些功能。源代碼不能改。給業(yè)務(wù)方法增加非業(yè)務(wù)功能,也可以使用AOP。

??Aspectj框架介紹

AOP技術(shù)思想的實(shí)現(xiàn):使用框架實(shí)現(xiàn)AOP。實(shí)現(xiàn)AOP的框架有很多。有名的兩個(gè)

1. Spring:Spring框架實(shí)現(xiàn)AOP思想中的部分功能。Spring框架實(shí)現(xiàn)AOP的操作比較繁瑣,笨重。
2. Aspectj:獨(dú)立的框架,專門做AOp的,功能最強(qiáng)大的。屬于Eclipse。

而我下面主要介紹的就是Aspectj框架來實(shí)現(xiàn)Aop,Aspectj框架可以使用注解和xml配置文件兩種方式實(shí)現(xiàn)AOP。

?Aspectj的5個(gè)通知注解

Aspectj表示切面執(zhí)行時(shí)間,用的通知(Advice)。這個(gè)通知可以使用注解表示。講5個(gè)注解,表示切面的5個(gè)執(zhí)行時(shí)間,這些注解叫做通知注解。

@Before :前置通知

@AfterRetunring: 后置通知

@Around: 環(huán)繞通知

@AfterThrowing:異常通知

@After:最終通知

?Aspectj切入點(diǎn)表達(dá)式

Pointcut 位置

Pointcut用來表示切面執(zhí)行的位置,使用Aspectj中切入點(diǎn)表達(dá)式。

切入點(diǎn)表達(dá)式語法:execution(訪問權(quán)限 方法返回值 方法聲明(參數(shù))異常類型)

通配符
aop聲明切面,spring,spring,java,前端
舉例:

指定切入點(diǎn)為:任意公共方法
aop聲明切面,spring,spring,java,前端
aop聲明切面,spring,spring,java,前端

?前置通知@Before

使用aspectj框架的注解,實(shí)現(xiàn)前置通知

實(shí)現(xiàn)步驟:

1. 新建maven項(xiàng)目

2. 修改pom.xml 加入依賴
spring-context依賴, spring-aspects依賴(能使用aspectj框架的功能)junit

3. 創(chuàng)建業(yè)務(wù)接口和實(shí)現(xiàn)類。

4. 創(chuàng)建一個(gè)叫做切面類,是一個(gè)普通類
1)在類的上面加入@Aspect
2) 在類中定義方法, 方法表示切面的功能。
在方法的上面加入Aspect框架中的通知注解,例如@Before(value=“切入點(diǎn)表達(dá)式”)

5. 創(chuàng)建spring配置文件。
1)聲明目標(biāo)對象
2)聲明切面類對象
3)聲明自動(dòng)代理生成器

6. 創(chuàng)建測試類,測試目標(biāo)方法執(zhí)行時(shí),增加切面的功能

下面我們開始跟著步驟實(shí)踐

pom.xml 加入依賴

  <dependencies>
    <!--spring依賴-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <!--spring-aspects依賴-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>


    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

創(chuàng)建業(yè)務(wù)接口和實(shí)現(xiàn)類

public interface SomeService {
    void doSome(String name,Integer age);
}
public class SomeServiceImpl implements SomeService {
    @Override
    public void doSome(String name, Integer age) {
        System.out.println("業(yè)務(wù)方法doSome(),創(chuàng)建商品訂單");
    }
}

創(chuàng)建切面類

/**
 *  @Aspect: 切面類的注解。
 *     位置:放在某個(gè)類的上面
 *     作用:表示當(dāng)前類是切面類。
 *     切面類:表示切面功能的類
 */
@Aspect
public class MyAspect {
    //定義方法,表示切面的具體功能
    /*
       前置通知方法的定義
       1)方法是public
       2)方法是void
       3)方法名稱自定義
       4)方法可以有參數(shù),如果有是JoinPoint
          也可以沒有
     */
    /**
     @Before:前置通知
     屬性:value 切入點(diǎn)表達(dá)式,表示切面的執(zhí)行位置。
     在這個(gè)方法時(shí),會同時(shí)執(zhí)行切面的功能
     位置:在方法的上面

     特點(diǎn):
     1)執(zhí)行時(shí)間:在目標(biāo)方法之前先執(zhí)行的。
     2)不會影響目標(biāo)方法的執(zhí)行。
     3)不會修改目標(biāo)方法的執(zhí)行結(jié)果。
     */
    @Before(value = "execution(public void youfei1_v.service.impl.SomeServiceImpl.doSome(String ,Integer))")
    public void myBefore(){
        //切面代碼
        System.out.println("前置通知,切面功能在目標(biāo)方法之前執(zhí)行"+new Date());
    }
}

創(chuàng)建配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--聲明目標(biāo)對象-->
    <bean id="someService" class="youfei1_v.service.impl.SomeServiceImpl" />


    <!--聲明切面類對象-->
    <bean id="myAspect" class="youfei1_v.handle.MyAspect"  />


    <!--聲明自動(dòng)代理生成器:目的是創(chuàng)建目標(biāo)對象的代理
        調(diào)用aspectj框架中的功能, 尋找spring容器中的所有目標(biāo)對象,
        把每個(gè)目標(biāo)對象加入切面類中的功能, 生成代理。
        這個(gè)代理對象是修改的內(nèi)存中的目標(biāo)對象, 這個(gè)目標(biāo)對象就是代理對象(ServiceProxy)
    -->
    <aop:aspectj-autoproxy />
</beans>

測試

@Test
    public void test(){
        //如果沒有加入代理的處理:
        // 1)目標(biāo)方法執(zhí)行時(shí),沒有切面功能的。
        // 2) service對象沒有被改變

        //加入代理的處理:
        // 1)目標(biāo)方法執(zhí)行時(shí),有切面功能的。
        // 2) service對象是改變后的 代理對象 com.sun.proxy.$Proxy8
        String s = "applicationContext.xml";
        ApplicationContext ctx = new ClassPathXmlApplicationContext(s);
        SomeService service = (SomeService)ctx.getBean("someService");
        service.doSome("ll" , 22);

    }

執(zhí)行結(jié)果:
aop聲明切面,spring,spring,java,前端文章來源地址http://www.zghlxwxcb.cn/news/detail-793613.html

??投票傳送門(歡迎伙伴們投票)

到了這里,關(guān)于【Spring】一文帶你吃透AOP面向切面編程技術(shù)(上篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • [SSM]Spring面向切面編程AOP

    [SSM]Spring面向切面編程AOP

    目錄 十五、面向切面編程AOP 15.1AOP介紹 15.2AOP的七大術(shù)語 15.3切點(diǎn)表達(dá)式 15.4使用Spring的AOP 15.4.1準(zhǔn)備工作 15.4.2基于AspectJ的AOP注解式開發(fā) 15.4.3基于XML配置方式的AOP(了解) 15.5AOP的實(shí)際案例:事務(wù)處理 15.6AOP的實(shí)際案例:安全日志 IoC使軟件組件松耦合。AOP讓你能夠捕捉系統(tǒng)中經(jīng)

    2024年02月15日
    瀏覽(28)
  • Spring AOP(面向切面編程)和方法攔截

    Spring AOP(面向切面編程)和方法攔截 Spring是一款廣泛使用的Java開發(fā)框架,提供了豐富的功能和工具,用于簡化企業(yè)級應(yīng)用程序的開發(fā)。其中一個(gè)重要的特性是面向切面編程(AOP)和方法攔截。本文將介紹Spring AOP和方法攔截的概念、工作原理以及在實(shí)際開發(fā)中的應(yīng)用。 在軟

    2024年02月05日
    瀏覽(24)
  • 認(rèn)識 spring AOP (面向切面編程) - springboot

    認(rèn)識 spring AOP (面向切面編程) - springboot

    本篇介紹什么是spring AOP, AOP的優(yōu)點(diǎn),使用場景,spring AOP的組成,簡單實(shí)現(xiàn)AOP 并 了解它的通知;如有錯(cuò)誤,請?jiān)谠u論區(qū)指正,讓我們一起交流,共同進(jìn)步! 本文開始 AOP: 面向切面編程,也就是面向某一類編程,對某一類事情進(jìn)行統(tǒng)一處理; spring AOP: 是實(shí)現(xiàn)了AOP這種思想的一

    2024年02月14日
    瀏覽(29)
  • 切面的魔力:解密Spring AOP 面向切面編程

    切面的魔力:解密Spring AOP 面向切面編程

    目錄 一、AOP簡介 1.1 什么是AOP ? 1.2?什么是面向切面編程 ? 1.3?AOP 的特點(diǎn) 二、?AOP的基本概念解讀 2.1 AOP的基本概念 2.2 AOP 概念趣事解讀 三、代碼情景演示 3.1?編寫目標(biāo)對象(超級英雄們正常的行動(dòng)) 3.2 編寫通知類 3.2.1?前置通知 3.2.2 后置通知 3.2.3 異常通知 3.2.4 環(huán)繞通知

    2024年02月11日
    瀏覽(89)
  • JAVA:使用 Spring AOP 實(shí)現(xiàn)面向切面編程

    JAVA:使用 Spring AOP 實(shí)現(xiàn)面向切面編程

    1、簡述 在現(xiàn)代的軟件開發(fā)中,面向切面編程(AOP)是一種重要的編程范式,它允許我們將橫切關(guān)注點(diǎn)(如日志記錄、性能監(jiān)控、事務(wù)管理等)從應(yīng)用程序的核心業(yè)務(wù)邏輯中分離出來,以提高代碼的模塊化和可維護(hù)性。Spring 框架提供了強(qiáng)大的 AOP 支持,使得我們可以輕松地實(shí)

    2024年04月13日
    瀏覽(31)
  • 【Java 初級】Spring核心之面向切面編程(AOP)

    【Java 初級】Spring核心之面向切面編程(AOP)

    tip:作為程序員一定學(xué)習(xí)編程之道,一定要對代碼的編寫有追求,不能實(shí)現(xiàn)就完事了。我們應(yīng)該讓自己寫的代碼更加優(yōu)雅,即使這會費(fèi)時(shí)費(fèi)力。 ???? 推薦: 體系化學(xué)習(xí)Java(Java面試專題) AOP(面向切面編程)是一種編程范式,用于將橫切關(guān)注點(diǎn)(如日志記錄、性能統(tǒng)計(jì)等

    2024年02月04日
    瀏覽(28)
  • spring6-AOP面向切面編程

    spring6-AOP面向切面編程

    1、場景模擬 搭建子模塊:spring6-aop 1.1、聲明接口 聲明計(jì)算器接口Calculator,包含加減乘除的抽象方法 1.2、創(chuàng)建實(shí)現(xiàn)類 1.3、創(chuàng)建帶日志功能的實(shí)現(xiàn)類 1.4、提出問題 ①現(xiàn)有代碼缺陷 針對帶日志功能的實(shí)現(xiàn)類,我們發(fā)現(xiàn)有如下缺陷: 對核心業(yè)務(wù)功能有干擾,導(dǎo)致程序員在開發(fā)核

    2024年02月08日
    瀏覽(32)
  • 【Spring AOP】結(jié)合日志面向切面編程 兩種寫法

    ??????? 這里需要提前了解什么是Spring的AOP(Aspect Oriented Programming)。是在OOP(面向?qū)ο螅┧枷氲囊环N拓展思想。 簡單來說就是將某個(gè)代碼塊嵌入到其它的代碼塊中 。筆者先前學(xué)Spring也有學(xué)什么IoC啊AOP啊,但實(shí)際上沒有用過、就那聽過學(xué)過沒啥用的。。沒會兒就忘記了。

    2024年02月13日
    瀏覽(28)
  • 一文吃透 Spring 中的 AOP 編程

    一文吃透 Spring 中的 AOP 編程

    ?作者簡介:2022年 博客新星 第八 。熱愛國學(xué)的Java后端開發(fā)者,修心和技術(shù)同步精進(jìn)。 ??個(gè)人主頁:Java Fans的博客 ??個(gè)人信條:不遷怒,不貳過。小知識,大智慧。 ??當(dāng)前專欄:SSM 框架從入門到精通 ?特色專欄:國學(xué)周更-心性養(yǎng)成之路 ??本文內(nèi)容:一文吃透 Spring 中

    2024年02月01日
    瀏覽(48)
  • Spring AOP (面向切面編程)原理與代理模式—實(shí)例演示

    Spring AOP (面向切面編程)原理與代理模式—實(shí)例演示

    Spring 中文文檔 (springdoc.cn) Spring | Home 官網(wǎng) ????????Java是一個(gè)面向?qū)ο螅∣OP)的語言,但它有一些弊端。雖然使用OOP可以通過組合或繼承的方式來實(shí)現(xiàn)代碼的重用。但當(dāng)我們需要為多個(gè)不具有繼承關(guān)系的對象(一般指的是兩個(gè)不同的類,它們之間沒有繼承自同一個(gè)父類或接

    2024年02月15日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包