手写SpringBoot(五)之整合AOP

系列文章目录

手写SpringBoot(一)之简易版SpringBoot
手写SpringBoot(二)之动态切换Servlet容器
手写SpringBoot(三)之自动配置
手写SpringBoot(四)之bean动态加载
手写SpringBoot(五)之整合AOP

手写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开启成功

系列文章目录

手写SpringBoot(一)之简易版SpringBoot
手写SpringBoot(二)之动态切换Servlet容器
手写SpringBoot(三)之自动配置
手写SpringBoot(四)之bean动态加载
手写SpringBoot(五)之整合AOP

相关推荐

  1. SpringBoot整合AOP

    2024-04-02 19:22:03       23 阅读
  2. SpringBoot(四)bean动态加载

    2024-04-02 19:22:03       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 19:22:03       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 19:22:03       5 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 19:22:03       4 阅读
  4. Python语言-面向对象

    2024-04-02 19:22:03       6 阅读

热门阅读

  1. [NOIP2005 普及组] 采药

    2024-04-02 19:22:03       25 阅读
  2. 每日一题:C语言经典例题之门禁系统

    2024-04-02 19:22:03       19 阅读
  3. 一文理解Python的全局解释器锁(GIL)

    2024-04-02 19:22:03       33 阅读
  4. 打造专属wow服务器配置需求!

    2024-04-02 19:22:03       20 阅读
  5. 前端低代码平台的使用学习

    2024-04-02 19:22:03       19 阅读
  6. Qt实现Kermit协议(二)

    2024-04-02 19:22:03       22 阅读
  7. C++中重载和重写的区别

    2024-04-02 19:22:03       18 阅读
  8. 解密SFP和QSFP:你需要知道的一切

    2024-04-02 19:22:03       20 阅读