最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot基于自定義注解實(shí)現(xiàn)切面編程

 更新時(shí)間:2020年11月23日 08:52:36   作者:_不正  
這篇文章主要介紹了SpringBoot基于自定義注解實(shí)現(xiàn)切面編程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1、相關(guān)依賴包

 <!-- aop 依賴包 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.8.6</version>
    </dependency>

2、定義切面類

package com.bz.aspect;

import com.bz.service.SysLogOperationService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 操作日志,切面處理類
 */
@Aspect
@Component
public class LogOperationAspect {
  @Autowired(required = false)
  private SysLogOperationService sysLogOperationService;

  @Pointcut("@annotation(com.bz.aspect.BzLogOperation)")
  public void logPointCut() {
    System.out.println("lllll");
  }

  /**
   * 前置通知:方法執(zhí)行前調(diào)用
   */
  @Before("logPointCut()")
  public void begin() {
    System.out.println("前置通知:方法執(zhí)行前調(diào)用");
  }

  /**
   * 后置通知: 方法執(zhí)行后調(diào)用,若方法出現(xiàn)異常,不執(zhí)行
   */
  @AfterReturning("logPointCut()")
  public void afterReturning() {
    System.out.println("后置通知: 方法執(zhí)行后調(diào)用,若方法出現(xiàn)異常,不執(zhí)行");
  }

  /**
   * 最終通知:無(wú)論無(wú)何都會(huì)調(diào)用,類似于:try/catch中的finally
   */
  @After("logPointCut()")
  public void after() {
    System.out.println("最終通知:無(wú)論無(wú)何都會(huì)調(diào)用,類似于:try/catch中的finally");
  }

  /**
   * 異常通知:方法拋出異常時(shí)執(zhí)行
   */
  @AfterThrowing("logPointCut()")
  public void afterThrowing() {
    System.out.println("異常通知:方法拋出異常時(shí)執(zhí)行");
  }

  /**
   * 環(huán)繞通知
   * 既可以在目標(biāo)方法之前織入增強(qiáng)動(dòng)作,也可以在執(zhí)行目標(biāo)方法之后織入增強(qiáng)動(dòng)作;
   * 可以決定目標(biāo)方法在什么時(shí)候執(zhí)行,如何執(zhí)行,甚至可以完全阻止目標(biāo)目標(biāo)方法的執(zhí)行;
   * 可以改變執(zhí)行目標(biāo)方法的參數(shù)值,也可以改變執(zhí)行目標(biāo)方法之后的返回值; 當(dāng)需要改變目標(biāo)方法的返回值時(shí),只能使用Around方法;
   */
  @Around("logPointCut()")
  public void around(ProceedingJoinPoint point) throws Throwable {
    // 獲取切點(diǎn)方法的名稱
    String methodName = point.getSignature().getName();
    // 獲取方法傳入?yún)?shù)
    Object[] params = point.getArgs();
    //轉(zhuǎn)成字符串
    List<Object> objects = Arrays.asList(params);
    objects.forEach(obj -> System.out.println(JSON.toJSONString(obj)));
    System.out.println("環(huán)繞通知");
  }
}

3、自定義切面注解類

package com.bz.aspect;

import java.lang.annotation.*;

/**
 * @author: BuZheng
 * @date: 2020-05-18 下午 2:02
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface BzLogOperation {

  String value() default "";
}

4、接口測(cè)試

  @ApiOperation("切面測(cè)試")
  @GetMapping("/aop")
  @BzLogOperation("切面測(cè)試")
  public ResultBean userList(@RequestParam(value = "keyWord") String keyWord) {
    log.info("### 切面測(cè)試 ###");

    return new ResultBean();
  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java面試題之HashSet的實(shí)現(xiàn)原理

    Java面試題之HashSet的實(shí)現(xiàn)原理

    這篇文章主要介紹了Java面試題之HashSet的實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 關(guān)于mybatis-plus插件使用時(shí)的一些問題小結(jié)

    關(guān)于mybatis-plus插件使用時(shí)的一些問題小結(jié)

    這篇文章主要給大家介紹了關(guān)于mybatis-plus插件使用時(shí)的一些問題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 通過(guò)@Resource注解實(shí)現(xiàn)屬性裝配代碼詳解

    通過(guò)@Resource注解實(shí)現(xiàn)屬性裝配代碼詳解

    這篇文章主要介紹了通過(guò)@Resource注解實(shí)現(xiàn)屬性裝配代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java的云打印Lodop

    Java的云打印Lodop

    這篇文章主要介紹了Java的云打印Lodop 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Java參數(shù)校驗(yàn)@Validated、@Valid介紹及使用詳解

    Java參數(shù)校驗(yàn)@Validated、@Valid介紹及使用詳解

    Javax.validation是?spring?集成自帶的一個(gè)參數(shù)校驗(yàn)接口,可通過(guò)添加注解來(lái)設(shè)置校驗(yàn)條件,這篇文章主要介紹了Java參數(shù)校驗(yàn)@Validated、@Valid介紹及使用詳解,需要的朋友可以參考下
    2024-08-08
  • Java線程監(jiān)聽,意外退出線程后自動(dòng)重啟的實(shí)現(xiàn)方法

    Java線程監(jiān)聽,意外退出線程后自動(dòng)重啟的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇Java線程監(jiān)聽,意外退出線程后自動(dòng)重啟的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Java下利用Jackson進(jìn)行JSON解析和序列化示例

    Java下利用Jackson進(jìn)行JSON解析和序列化示例

    本篇文章主要介紹了Java下利用Jackson進(jìn)行JSON解析和序列化示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Java中的注解詳解(Annotation)

    Java中的注解詳解(Annotation)

    文章介紹了Java中的注解,包括注解的定義、元注解、Java內(nèi)置的三大注解、自定義注解、反射注解以及注解的作用,注解是一種特殊的標(biāo)記,可以用于類、方法、字段等元素,用于提供元數(shù)據(jù)信息
    2025-03-03
  • java實(shí)現(xiàn)兩個(gè)線程交替打印的實(shí)例代碼

    java實(shí)現(xiàn)兩個(gè)線程交替打印的實(shí)例代碼

    在本篇文章里小編給大家整理的是一篇關(guān)于java實(shí)現(xiàn)兩個(gè)線程交替打印的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們參考下。
    2019-12-12
  • Java實(shí)現(xiàn)黃金分割法的示例代碼

    Java實(shí)現(xiàn)黃金分割法的示例代碼

    黃金分割法是一種區(qū)間收縮方法。所謂區(qū)間收縮方法,指的是將含有最優(yōu)解的區(qū)間逐步縮小,直至區(qū)間長(zhǎng)度為零的方法。本文將用Java實(shí)現(xiàn)這一算法,需要的可以參考一下
    2022-03-03

最新評(píng)論

镇远县| 波密县| 沈阳市| 巴青县| 岳阳县| 杭锦后旗| 淮南市| 青冈县| 苏尼特左旗| 呼和浩特市| 永靖县| 郁南县| 区。| 长宁县| 商水县| 固原市| 凉城县| 德安县| 靖远县| 玉环县| 平邑县| 沾益县| 开原市| 全椒县| 宁阳县| 来宾市| 桃源县| 宁化县| 桐庐县| 望江县| 西城区| 康乐县| 项城市| 锡林浩特市| 呼伦贝尔市| 永城市| 神农架林区| 察隅县| 深圳市| 酒泉市| 灯塔市|