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

Java注解方式實(shí)現(xiàn)aop,切點(diǎn)切面實(shí)戰(zhàn)

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

注解方式實(shí)現(xiàn)aop我們主要分為如下幾個(gè)步驟(有更好的方法的話,歡迎交流):

1.在切面類(為切點(diǎn)服務(wù)的類)前用@Aspect注釋修飾,聲明為一個(gè)切面類。

2.用@Pointcut注釋聲明一個(gè)切點(diǎn),目的是為了告訴切面,誰(shuí)是它的服務(wù)對(duì)象。(此注釋修飾的方法的方法體為空,不需要寫功能比如 public void say(){};就可以了,方法名可以被候命的具體服務(wù)功能所以引用,它可以被理解為切點(diǎn)對(duì)象的一個(gè)代理對(duì)象方法)

3.在對(duì)應(yīng)的方法前用對(duì)應(yīng)的通知類型注釋修飾,將對(duì)應(yīng)的方法聲明稱一個(gè)切面功能,為了切點(diǎn)而服務(wù)

4.在spring配置文件中開啟aop注釋自動(dòng)代理。如:<aop:aspectj-autoproxy/>

可能很抽象,那么廢話不多說(shuō),代碼如下:

1、創(chuàng)建你的業(yè)務(wù)方法(切點(diǎn)方法)

package com.lnj.aop;

import org.springframework.stereotype.Component;

@Component("knight")
public class BraveKnight {
    public void saying(){
        System.out.println("我是業(yè)務(wù)方法類..(切點(diǎn)方法)");
    }
}

2、切面類:(注釋主要在這里體現(xiàn))

package com.lnj.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;


/**
 * 注解方式聲明aop
 * 1.用@Aspect注解將類聲明為切面(如果用@Component("")注解注釋為一個(gè)bean對(duì)象,那么就要在spring配置文件中開啟注解掃描,<context:component-scan base-package="com.lnj.aop"/>
 *      否則要在spring配置文件中聲明一個(gè)bean對(duì)象)
 * 2.在切面需要實(shí)現(xiàn)相應(yīng)方法的前面加上相應(yīng)的注釋,也就是通知類型。
 * 3.此處有環(huán)繞通知,環(huán)繞通知方法一定要有ProceedingJoinPoint類型的參數(shù)傳入,然后執(zhí)行對(duì)應(yīng)的proceed()方法,環(huán)繞才能實(shí)現(xiàn)。
 */
@Component("annotationTest")
@Aspect
public class AnnotationTest {
    //定義切點(diǎn)
    @Pointcut("execution(* *.saying(..))")
    public void sayings(){}
    /**
     * 前置通知(注解中的sayings()方法,其實(shí)就是上面定義pointcut切點(diǎn)注解所修飾的方法名,那只是個(gè)代理對(duì)象,不需要寫具體方法,
     * 相當(dāng)于xml聲明切面的id名,如下,相當(dāng)于id="embark",用于供其他通知類型引用)
     * <aop:config>
        <aop:aspect ref="mistrel">
            <!-- 定義切點(diǎn) -->
            <aop:pointcut expression="execution(* *.saying(..))" id="embark"/>
            <!-- 聲明前置通知 (在切點(diǎn)方法被執(zhí)行前調(diào)用) -->
            <aop:before method="beforSay" pointcut-ref="embark"/>
            <!-- 聲明后置通知 (在切點(diǎn)方法被執(zhí)行后調(diào)用) -->
            <aop:after method="afterSay" pointcut-ref="embark"/>
        </aop:aspect>
       </aop:config>
     */
    @Before("sayings()")
    public void sayHello(){
        System.out.println("注解類型前置通知");
    }
    //后置通知
    @After("sayings()")
    public void sayGoodbey(){
        System.out.println("注解類型后置通知");
    }
    //環(huán)繞通知。注意要有ProceedingJoinPoint參數(shù)傳入。
    @Around("sayings()")
    public void sayAround(ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("注解類型環(huán)繞通知..環(huán)繞前");
        pjp.proceed();//執(zhí)行方法
        System.out.println("注解類型環(huán)繞通知..環(huán)繞后");
    }
}

3、spring配置文件:

<?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:context="http://www.springframework.org/schema/context"
    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 http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!-- 開啟注解掃描 -->
    <context:component-scan base-package="com.lnj.aop"/>
    <!-- 開啟aop注解方式,此步驟s不能少,這樣java類中的aop注解才會(huì)生效 -->
    <aop:aspectj-autoproxy/>
</beans>

4、啟動(dòng)測(cè)試代碼:

package com.lnj.aop;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("com/lnj/aop/beans.xml");
        BraveKnight br = (BraveKnight) ac.getBean("knight");
        br.saying();
    }
}

運(yùn)行結(jié)果:

注解類型環(huán)繞通知..環(huán)繞前
注解類型前置通知
我是業(yè)務(wù)方法類..(切點(diǎn)方法)
注解類型環(huán)繞通知..環(huán)繞后
注解類型后置通知

========================分割線===================================
  因?yàn)槭褂昧俗⒔夥绞?,所以配置文件少了很多?nèi)容,只需要一句<context:component-scan base-package="com.lnj.aop"/>聲明要掃描的包,框架會(huì)自動(dòng)掃描注釋并生成bean對(duì)象。有個(gè)@Component("knight")這個(gè)注釋,和<bean id="knight" class="com.lnj.aop.BraveKnight"/>這個(gè)配置時(shí)一樣的意思,框架會(huì)自動(dòng)識(shí)別并創(chuàng)建名為knight的BraveKnight對(duì)象。所以有了注釋,只需要開啟注釋掃描配置就好了,無(wú)需再做相同的bean配置。

如果運(yùn)行過(guò)程中出現(xiàn)Spring aop : error at ::0 can't find referenced pointcut sleepPonit的錯(cuò)誤,那么很可能是spring的包的版本問(wèn)題,

工程目錄如下:

java切面編程注解,Java,java,spring,mybatis,學(xué)習(xí),開發(fā)語(yǔ)言

通知注解類型如下:

java切面編程注解,Java,java,spring,mybatis,學(xué)習(xí),開發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-656016.html

到了這里,關(guān)于Java注解方式實(shí)現(xiàn)aop,切點(diǎn)切面實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(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】使用aop切面編程時(shí)要給那些類加注解

    【Spring】使用aop切面編程時(shí)要給那些類加注解

    ??歡迎來(lái)到@邊境矢夢(mèng)°的csdn博文?? ???本文主要梳理?Spring?中使用aop切面編程時(shí)要給那些類加注解??? ??我是邊境矢夢(mèng)°,一個(gè)正在為秋招和算法競(jìng)賽做準(zhǔn)備的學(xué)生?? ??喜歡的朋友可以關(guān)注一下 ?????? ,下次更新不迷路?? Ps: 月亮越亮說(shuō)明知識(shí)點(diǎn)越重要 (重要性或者

    2024年02月07日
    瀏覽(22)
  • 【Spring進(jìn)階系列丨第十篇】基于注解的面向切面編程(AOP)詳解

    【Spring進(jìn)階系列丨第十篇】基于注解的面向切面編程(AOP)詳解

    ? 注意,該類的兩個(gè)細(xì)節(jié): a、@Component注解向容器中注冊(cè)一個(gè)Bean。 b、@Aspect注解表示這個(gè)是一個(gè)切面類。 c、@Before注解表示的是這個(gè)是前置增強(qiáng)/前置通知。 ? 注意:對(duì)于業(yè)務(wù)Bean,我們也需要通過(guò)@Service注解來(lái)向容器中注冊(cè)。 ? 問(wèn)題:我們看到對(duì)于切面類中定義的通知,有

    2024年04月23日
    瀏覽(29)
  • Spring Boot學(xué)習(xí)隨筆- 實(shí)現(xiàn)AOP(JoinPoint、ProceedingJoinPoint、自定義注解類實(shí)現(xiàn)切面)

    Spring Boot學(xué)習(xí)隨筆- 實(shí)現(xiàn)AOP(JoinPoint、ProceedingJoinPoint、自定義注解類實(shí)現(xiàn)切面)

    學(xué)習(xí)視頻:【編程不良人】2021年SpringBoot最新最全教程 問(wèn)題 現(xiàn)有業(yè)務(wù)層開發(fā)存在問(wèn)題 額外功能代碼存在大量冗余 每個(gè)方法都需要書寫一遍額外功能代碼不利于項(xiàng)目維護(hù) Spring中的AOP AOP:Aspect 切面 + Oriented 面向 Programmaing 面向切面編程 Aspect(切面) = Advice(通知) + Pointcut(

    2024年02月04日
    瀏覽(43)
  • 注解 + spring aop切面+ SpringEl

    2024年02月09日
    瀏覽(27)
  • 8.4Java EE——基于注解的AOP實(shí)現(xiàn)

    8.4Java EE——基于注解的AOP實(shí)現(xiàn)

    元素 描述 @Aspect 配置切面 @Pointcut 配置切點(diǎn) @Before 配置前置通知 @After 配置后置通知 @Around 配置環(huán)繞方式 @AfterReturning 配置返回通知 @AfterThrowing 配置異常通知 下面通過(guò)一個(gè)案例演示基于注解的AOP的實(shí)現(xiàn),案例具體實(shí)現(xiàn)步驟如下。

    2024年02月15日
    瀏覽(20)
  • SpringBoot 使用【AOP 切面+注解】實(shí)現(xiàn)在請(qǐng)求調(diào)用 Controller 方法前修改請(qǐng)求參數(shù)和在結(jié)果返回之前修改返回結(jié)果

    在項(xiàng)目中需要實(shí)現(xiàn) 在請(qǐng)求調(diào)用 Controller 方法前修改請(qǐng)求參數(shù)和在結(jié)果返回之前修改返回結(jié)果 。 我們可以使用 AOP 切面+注解的形式實(shí)現(xiàn)。這樣我們就可以在不修改原始代碼的情況下,通過(guò)切面類在方法調(diào)用前后插入額外的邏輯。 自定義注解 @PreProcess 自定義注解 @PreProcess 用于

    2024年03月20日
    瀏覽(38)
  • Java | 使用切面AOP攔截并修改Controller接口請(qǐng)求參數(shù)

    Java | 使用切面AOP攔截并修改Controller接口請(qǐng)求參數(shù)

    關(guān)注common wx: CodingTechWork ??在開發(fā)過(guò)程中,會(huì)有一些需求將controller層的一些方法入?yún)⑦M(jìn)行全量轉(zhuǎn)換,最容易想到的可能是在調(diào)用下層service方法時(shí),調(diào)用公共的方法進(jìn)行入?yún)⑥D(zhuǎn)換,這時(shí)帶來(lái)的唯一問(wèn)題就是代碼不雅觀,比較冗余。那還有什么方法可以更優(yōu)雅的解決這個(gè)問(wèn)題

    2024年01月24日
    瀏覽(20)
  • 【Spring】javaBean、依賴注入、面向切面AOP、使用注解開發(fā)

    【Spring】javaBean、依賴注入、面向切面AOP、使用注解開發(fā)

    有一定規(guī)范的Java實(shí)體類,類內(nèi)提供了一些公共方法以便外界對(duì)該對(duì)象的內(nèi)部屬性進(jìn)行操作 所有屬性都是private,所有的屬性都可以通過(guò)get/set方法進(jìn)行訪問(wèn),同時(shí)還需要有一個(gè)無(wú)參構(gòu)造(默認(rèn)就有) 高內(nèi)聚,低耦合是現(xiàn)代軟件的開發(fā)的設(shè)計(jì)模式 之前編寫的圖書管理系統(tǒng)具有高

    2024年02月08日
    瀏覽(57)
  • 如何將重復(fù)方法封裝為Aop切面并結(jié)合注解使用

    如何將重復(fù)方法封裝為Aop切面并結(jié)合注解使用

    首先要導(dǎo)入依賴 編寫注解 編寫Aop 方法上添加注解 ? 然后測(cè)試就發(fā)現(xiàn)添加代碼的方法都可以防止重復(fù)提交了?。?/p>

    2024年02月02日
    瀏覽(20)
  • 【項(xiàng)目實(shí)戰(zhàn)】并發(fā)編程之Java中使用五種方式實(shí)現(xiàn)延時(shí)執(zhí)行調(diào)用

    To實(shí)現(xiàn)延時(shí)執(zhí)行調(diào)用,Java中可以使用Thread.sleep()方法。該方法接受一個(gè)以毫秒為單位的時(shí)間參數(shù),使當(dāng)前線程休眠指定的時(shí)間。在休眠期間,線程不會(huì)執(zhí)行任何操作。 以下是一個(gè)示例代碼塊,演示如何使用Thread.sleep()方法實(shí)現(xiàn)延時(shí)執(zhí)行調(diào)用:

    2024年02月15日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包