手写SpringBoot(五)之整合AOP

简介: Spring开启aop只需要在任意一个加了@Configuration配置类的上面加上@EnableAspectJAutoProxy注解就行.

手写SpringBoot(五)之整合AOP


Spring开启aop只需要在任意一个加了@Configuration配置类的上面加上@EnableAspectJAutoProxy注解就行


新建my-spring-boot-starter-aop模块


  1. 引入aspectj依赖


    <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.5</version>
        </dependency>

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

        <dependency>
            <groupId>cn.axj</groupId>
            <artifactId>my-spring-boot-configuration</artifactId>
            <version>1.0-SNAPSHOT</version>
    </dependency>
  1. 创建AopAutoConfiguration配置类,并配置@EnableAspectJAutoProxy注解


package cn.axj.aop.springboot.config;

import cn.axj.springboot.my.config.AutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
public class AopAutoConfiguration implements AutoConfiguration {
    
    @Configuration
    @EnableAspectJAutoProxy
    static class AspectjConfiguration{

    }
}

  1. 创建配置类文件 META-INF/service/cn.axj.springboot.my.config.AutoConfiguration文件,并将AopAutoConfiguration的路径配置进去
cn.axj.aop.springboot.config.AopAutoConfiguration

下面开始测试,在user-servcie模块中引入my-spring-boot-starter-aop

  <dependency>
            <groupId>cn.axj</groupId>
            <artifactId>my-spring-boot-starter-aop</artifactId>
            <version>1.0-SNAPSHOT</version>
    </dependency>
  1. 创建aop包,并创建TestAopAnnotation注解


package cn.axj.user.aop;

import java.lang.annotation.*;

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

}

  1. 创建aop代理类TestAop
package cn.axj.user.aop;

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

@Aspect
@Component
public class TestAop {
    @Around("@annotation(cn.axj.user.aop.TestAopAnnotation)")
    public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        Object proceed = proceedingJoinPoint.proceed();
        String after = "after advice";
        return after + "____" + proceed;
    }
}
  1. 在TestController ,test方法上面加上注解@TestAopAnnotation
  @GetMapping(value = "/test")
    @TestAopAnnotation
    public String test(Integer id){
        return userService.test(id).toString();
    }

开启user-service模块


访问localhost:8080/test?id=2


返回

after advice____User{id=2, username='lisi'},看到返回aop代理字符串after advice____,aop开启成功

目录
相关文章
|
2月前
|
缓存 Java Sentinel
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
|
2天前
|
Java API
springboot实现aop
springboot实现aop
10 1
|
10天前
|
缓存 监控 安全
在 Spring Boot 中使用 AOP(Aspect-Oriented Programming)实现日志记录功能
在 Spring Boot 中使用 AOP(Aspect-Oriented Programming)实现日志记录功能
20 1
|
2天前
|
Java 开发者 Spring
使用Spring Boot AOP实现日志记录
使用Spring Boot AOP实现日志记录
|
2月前
|
Java
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
Springboot 使用自定义注解结合AOP方式校验接口参数
|
2月前
|
前端开发 Java
干货文:SpringBoot 配置 AOP 打印请求参数和返回参数
干货文:SpringBoot 配置 AOP 打印请求参数和返回参数
186 1
|
2月前
|
Java 数据库连接 应用服务中间件
Spring5源码(39)-Aop事物管理简介及编程式事物实现
Spring5源码(39)-Aop事物管理简介及编程式事物实现
33 0
|
16天前
|
Java Maven 数据安全/隐私保护
详解 Java AOP:面向方面编程的核心概念与 Spring 实现
详解 Java AOP:面向方面编程的核心概念与 Spring 实现
24 1
|
3天前
|
前端开发 Java 数据库
浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
|
3天前
|
XML Java 数据格式
技术好文:Spring基础篇——AOP切面编程
技术好文:Spring基础篇——AOP切面编程