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

注解 + spring aop切面+ SpringEl

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

定義注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FlowStart {

    /**
     * 流程類型
     */
    String flowType();

    /**
     * uuid
     */
    String uuid();

    /**
     * 是否刪除原來流程
     */
    boolean deleteOld() default false;
}

定義切面

/**
 * 流程啟動(dòng)切面
 * @author GuoYong
 * @since 2023/9/6
 */
@Aspect
@Component
public class FlowStartAspect {

    private final ProcessInstanceClient processInstanceClient;

    public FlowStartAspect(ProcessInstanceClient processInstanceClient) {
        this.processInstanceClient = processInstanceClient;
    }

    /**
     * 定義切面
     */
    @Pointcut("execution(@com.config.FlowStart * *(..))")
    private void startAspect() {

    }

    @Around("startAspect()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        Object[] args = joinPoint.getArgs();
        Object proceeded = joinPoint.proceed(args);
        // 獲取注解
        FlowStart flowStart = getAnnotationLog(joinPoint);
        // 獲取注解的值
        String flowType = flowStart.flowType();
        String uuidEl = flowStart.uuid();
        boolean deleteOld = flowStart.deleteOld();
        // 解析el表達(dá)式
        ExpressionParser parser = new SpelExpressionParser();
        LocalVariableTableParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDiscoverer();
        Method targetMethod = getTargetMethod(joinPoint);
        String[] params = discoverer.getParameterNames(targetMethod);
        EvaluationContext context = new StandardEvaluationContext();
        for (int len = 0; len < params.length; len++) {
            context.setVariable(params[len], args[len]);
        }
        Expression expression = parser.parseExpression(uuidEl);
        String uuids = expression.getValue(context, String.class);
        String [] uuidArray = uuids.split(",");
        for (String uuid : uuidArray) {
            if (deleteOld) {
                processInstanceClient.deleteByBusinessKey(uuid);
            }
            Result result = processInstanceClient.init(InitProcessDto.builder()
                    .businessKey(uuid)
                    .processKey(flowType)
                    .build());
            if (!result.isOk()) {
                throw new RuntimeException("流程啟動(dòng)失敗");
            }
        }
        return proceeded;
    }

    private Method getTargetMethod(JoinPoint joinPoint) {
        Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method method = methodSignature.getMethod();
        return method;
    }

    /**
     * 是否存在注解,如果存在就獲取
     */
    private FlowStart getAnnotationLog(JoinPoint joinPoint) {
        Method method = getTargetMethod(joinPoint);
        if (method != null) {
            return method.getAnnotation(FlowStart.class);
        }
        return null;
    }

}

使用

  @FlowStart(flowType = ProcessKeyConstants.DUTY_SCHEDULING_FLOW, uuid = "#editDutySchedulingDto.businessKey", deleteOld = true)

文章來源地址http://www.zghlxwxcb.cn/news/detail-698470.html

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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進(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,我們也需要通過@Service注解來向容器中注冊(cè)。 ? 問題:我們看到對(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最新最全教程 問題 現(xiàn)有業(yè)務(wù)層開發(fā)存在問題 額外功能代碼存在大量冗余 每個(gè)方法都需要書寫一遍額外功能代碼不利于項(xiàng)目維護(hù) Spring中的AOP AOP:Aspect 切面 + Oriented 面向 Programmaing 面向切面編程 Aspect(切面) = Advice(通知) + Pointcut(

    2024年02月04日
    瀏覽(43)
  • Java AOP 通過注解實(shí)現(xiàn)切面及通過注解改變返回值

    學(xué)習(xí)過java的小伙伴都知道Spring的重要知識(shí)點(diǎn)之一就是AOP,AOP也就是切面編程,切面編程它能夠幫助我們實(shí)現(xiàn)非侵入式的功能增強(qiáng),解耦現(xiàn)有的業(yè)務(wù)邏輯和要新增的功能增強(qiáng)。 實(shí)際應(yīng)用中的場景 事務(wù)管理、攔截器、日志處理、權(quán)限控制等。 AOP的增強(qiáng)方式 前置增強(qiáng)、后置增強(qiáng)

    2024年02月14日
    瀏覽(24)
  • Java注解方式實(shí)現(xiàn)aop,切點(diǎn)切面實(shí)戰(zhàn)

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

    注解方式實(shí)現(xiàn)aop我們主要分為如下幾個(gè)步驟(有更好的方法的話,歡迎交流): 1.在切面類(為切點(diǎn)服務(wù)的類)前用@Aspect注釋修飾,聲明為一個(gè)切面類。 2.用@Pointcut注釋聲明一個(gè)切點(diǎn),目的是為了告訴切面,誰是它的服務(wù)對(duì)象。(此注釋修飾的方法的方法體為空,不需要寫功

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

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

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

    2024年02月02日
    瀏覽(20)
  • Spring AOP:面向切面編程

    在軟件開發(fā)中,我們經(jīng)常會(huì)遇到一些橫切關(guān)注點(diǎn)(cross-cutting concerns),如日志記錄、事務(wù)管理和安全性等。這些關(guān)注點(diǎn)不屬于特定的模塊或類,而是橫跨整個(gè)應(yīng)用程序。傳統(tǒng)的面向?qū)ο缶幊谭椒ㄍ鶗?huì)將這些關(guān)注點(diǎn)與核心業(yè)務(wù)邏輯混雜在一起,導(dǎo)致代碼的可讀性和可維護(hù)性下

    2024年02月09日
    瀏覽(22)
  • Spring面向切面編程(AOP)

    Spring面向切面編程(AOP)

    AOP(Aspect Oriented Programming),即面向切面編程,利用一種稱為\\\"橫切\(zhòng)\\"的技術(shù),剖開封裝的對(duì)象內(nèi)部,并將那些影響了多個(gè)類的公共行為封裝到一個(gè)可重用模塊,并將其命名為\\\"Aspect\\\",即切面。所謂\\\"切面\\\",簡單說就是那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝

    2024年02月07日
    瀏覽(31)
  • Spring-aop面向切面

    Spring-aop面向切面

    1、理解必要的專業(yè)術(shù)語 ?先看看上面圖,這是我的個(gè)人理解。(畫的丑,主打真實(shí)) ? ? ? ? 1)Advice,通知/增強(qiáng):類方法中提出來的共性功能(大白話就是提出來的重復(fù)代碼) ????????2)Pointcut,切入點(diǎn)/切點(diǎn):通知返回的方法 ????????3)連接點(diǎn):方法 ? ? ? ? 4)織入:

    2023年04月15日
    瀏覽(86)
  • spring之面向切面:AOP(2)

    spring之面向切面:AOP(2)

    學(xué)習(xí)的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統(tǒng)/深入學(xué)習(xí)某技術(shù)知識(shí)點(diǎn)… 一個(gè)人摸索學(xué)習(xí)很難堅(jiān)持,想組團(tuán)高效學(xué)習(xí)… 想寫博客但無從下手,急需寫作干貨注入能量… 熱愛寫作,愿意讓自己成為更好

    2024年02月04日
    瀏覽(12)
  • Spring-AOP(面向切面)

    Spring-AOP(面向切面)

    功能接口 實(shí)現(xiàn)類 在含有日志輸出的實(shí)現(xiàn)類中可以了解到:與核心業(yè)務(wù)功能沒有關(guān)系的日志輸出加雜在模塊中,對(duì)核心業(yè)務(wù)功能有干擾。 思路:解耦 , 將附加功能從業(yè)務(wù)功能模塊中抽取出來 概念 二十三種設(shè)計(jì)模式中的一種,屬于結(jié)構(gòu)型模式,它的作用就是通過提供一個(gè)代理

    2024年02月16日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包