概述
入坑 : 多个自定义注解添加到同一方法中
1、切点方法
@RequestMapping("productSend")
@ProductSendLog
@StatisticalLogAnnotation
public Result<Object> productSend() {
......
}
2、自定义注解 @ProductSendLog
@Target(value = ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
public @interface ProductSendLog {
String operation();
}
3、自定义注解 @StatisticalLogAnnotation
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface StatisticalLogAnnotation {
...
}
4、Aop切面 ProductSendLogAspect
@Component
@Aspect
@Slf4j
public class ProductSendLogAspect {
@Resource
private RedisDaoImpl redisDao;
@Pointcut("@annotation(com.xkd.common.annotation.ProductSendLog)")
public void aspect() {
}
@AfterReturning(value="@annotation(annotation)", returning = "obj")
public void doAfter(JoinPoint joinPoint, ProductSendLog annotation, Object obj){
...
}
5、Aop切面 StatisticalLogAspect
@Component
@Aspect
@Slf4j
public class StatisticalLogAspect {
@Resource
private RedisDaoImpl redisDao;
@Pointcut("@annotation(com.xkd.common.annotation.StatisticalLogAnnotation)")
public void aspect() {
}
@AfterReturning(value="@annotation(annotation)", returning = "obj")
public void doAfter(JoinPoint joinPoint, StatisticalLogAnnotation annotation, Object obj){
...
}
以上情况,同一个接口添加了两个自定义注解,并且两个自定义注解所执行的aop的自定义注解对象都是通过@annotation()方式引入的。 将会导致两个自定义注解一起注入到参数的自定义注解类中。
例如:StatisticalLogAspect类中的doAfter方法的参数StatisticalLogAnnotation 在依赖注入的时候,会注入StatisticalLogAnnotation对象和ProductSendLog对象。导致参数类型不匹配问题。
解决方案:
将其中一个切面的注入自定义注解类的方式修改成其他形式。
例如:
@Component
@Aspect
@Slf4j
public class ProductSendLogAspect {
@Resource
private RedisDaoImpl redisDao;
@Pointcut("@annotation(com.xkd.common.annotation.ProductSendLog)")
public void aspect() {
}
@AfterReturning(value = "aspect()", returning = "obj")
public void doAfter(JoinPoint joinPoint, Object obj){
MethodSignature signature = null;
if (joinPoint.getSignature() instanceof MethodSignature) {
signature = (MethodSignature) joinPoint.getSignature();
}
if (signature != null) {
Method method = signature.getMethod();
ProductSendLog annotation = method.getAnnotation(ProductSendLog.class);
}
...
}
最后
以上就是多情大地为你收集整理的入坑 : 多个自定义注解添加到同一方法中的全部内容,希望文章能够帮你解决入坑 : 多个自定义注解添加到同一方法中所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复