📚简介:
需要对AOP有一点了解的情况下看进阶的内容才容易懂一些点击查看往期AOP内容,然后前一篇写的比较基础些通常在业务多变的情况下可能会有多个业务也需要设置相同的切面达到方法的增强,这个时候可能方法就不在同包下或者方法名称又不一致导致切面表达式execution
会不知道怎么写或者配置起来会更麻烦。
那么我们可以试着用注解的方式来设置切面
,只需要在对应的方法上添加注解即可得到切面的增强。
项目包结构:
配置信息:
启动服务:
💨进阶版
接下来通过项目来带大家理解注解AOP带来的便利
现在我有个商品控制层调用接口后会修改商品信息,然后我现在要对接口增强在请求接口时我需要保存请求方发送的请求参数信息等。
🗺️未实现AOP效果
未实现AOP效果示例
我把请求参数也打印出来
使用软件调用接口:
接下来按照需求完成请求接口获取请求参数信息等操作。
🎢创建注解:
创建注解:
元注解解释:
@Target
({ ElementType.PARAMETER, ElementType.METHOD })//注解可以添加在哪个:ElementType.PARAMETER 可以添加到方法参数 ElementType.METHOD 可以添加到方法上
@Retention
(RetentionPolicy.RUNTIME)//注解的生命周期是在运行时
/**
* @Author itmei
* @Date 2022/12/19 14:56
* @description: 日志注解
* @Title: Log
* @Package com.itmei.springaopanno.annotation
*/
@Component
@Target({ ElementType.PARAMETER, ElementType.METHOD })//注解可以添加在哪个:ElementType.PARAMETER 可以添加到方法参数 ElementType.METHOD 可以添加到方法上
@Retention(RetentionPolicy.RUNTIME)//注解的生命周期是在运行时
@Documented//用于生成文档使用的
public @interface Log {
/**
* 记录的标题
* @return
*/
public String title() default "";
/**
* 是否开启记录
* @return
*/
public boolean isOpen() default true;
}
💭创建注解切面
@Before(value = "@annotation(log)")
其中value中@annotation(log)填写的是注解,我们需要在方法参数里面添加这个注解这样切面就会以注解为准把添加了注解的方法进行增强了。
/**
* @Author itmei
* @Date 2022/12/19 15:10
* @description: 切面注解
* @Title: LogAspect
* @Package com.itmei.springaopanno.config
*/
@Component
@Aspect
@Order(1)
public class LogAspect {
@Before(value = "@annotation(log)")
public void logBefore(JoinPoint joinPoint, Log log){
System.out.println("----AOP增强接口----");
System.out.println("请求接口参数:"+Arrays.asList(joinPoint.getArgs()));
System.out.println("接口的标题是:"+log.title());
}
}
🚀使用方式:
使用方式就很简单了,在需要的接口中添加我们自己定义的注解即可
运行效果:
这个时候又有另外一个接口需要使用这个切面,也是只要在接口上添加即可。
这样我们就可以对一种业务相同的情况下创建一个注解切面来对接口增强就非常省力了。
🎉结束:
到这里使用注解AOP方式就结束了,希望可以给你带来帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83789.html