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

目录
相关文章
|
4月前
|
SQL 监控 Java
在IDEA 、springboot中使用切面aop实现日志信息的记录到数据库
这篇文章介绍了如何在IDEA和Spring Boot中使用AOP技术实现日志信息的记录到数据库的详细步骤和代码示例。
在IDEA 、springboot中使用切面aop实现日志信息的记录到数据库
|
25天前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
52 5
|
1月前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
53 1
|
5月前
|
Java Spring
在Spring Boot中使用AOP实现日志切面
在Spring Boot中使用AOP实现日志切面
|
2月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
87 2
|
4月前
|
Java Spring 容器
SpringBoot整合AOP实现打印方法执行时间切面
SpringBoot整合AOP实现打印方法执行时间切面
55 1
|
4月前
|
Java API Spring
Spring Boot 中的 AOP 处理
对 Spring Boot 中的切面 AOP 做了详细的讲解,主要介绍了 Spring Boot 中 AOP 的引入,常用注解的使用,参数的使用,以及常用 api 的介绍。AOP 在实际项目中很有用,对切面方法执行前后都可以根据具体的业务,做相应的预处理或者增强处理,同时也可以用作异常捕获处理,可以根据具体业务场景,合理去使用 AOP。
|
3月前
Micronaut AOP与代理机制:实现应用功能增强,无需侵入式编程的秘诀
AOP(面向切面编程)能够帮助我们在不修改现有代码的前提下,为应用程序添加新的功能或行为。Micronaut框架中的AOP模块通过动态代理机制实现了这一目标。AOP将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,提高模块化程度。在Micronaut中,带有特定注解的类会在启动时生成代理对象,在运行时拦截方法调用并执行额外逻辑。例如,可以通过创建切面类并在目标类上添加注解来记录方法调用信息,从而在不侵入原有代码的情况下增强应用功能,提高代码的可维护性和可扩展性。
81 1
|
1月前
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
144 1
什么是AOP面向切面编程?怎么简单理解?
|
1月前
|
XML Java 开发者
论面向方面的编程技术及其应用(AOP)
【11月更文挑战第2天】随着软件系统的规模和复杂度不断增加,传统的面向过程编程和面向对象编程(OOP)在应对横切关注点(如日志记录、事务管理、安全性检查等)时显得力不从心。面向方面的编程(Aspect-Oriented Programming,简称AOP)作为一种新的编程范式,通过将横切关注点与业务逻辑分离,提高了代码的可维护性、可重用性和可读性。本文首先概述了AOP的基本概念和技术原理,然后结合一个实际项目,详细阐述了在项目实践中使用AOP技术开发的具体步骤,最后分析了使用AOP的原因、开发过程中存在的问题及所使用的技术带来的实际应用效果。
68 5