aspectJ 编译时织入遇到的3个问题

aspectJ 编译时织入 结合spring动态代理时遇到的3个问题:

第1个问题

  • 自定义注解



  • 拦截器



  • 编译后的class:



当调用 bizServcie.loanAmount时进入了2次,看编译后的类确实是调用者method和加@Voucher的metod都被编译植入了

问题出在:

1
2
@Around("@annotation(net.keking.lbt.business.vou.annotation.Voucher
)")

这个是 springaop语法,并不是aspectJ语法
正确的pointcut 是:

1
@Around("execution(@net.keking.lbt.business.vou.annotation.Voucher * *(..))")
  • 目前编译后的效果:


第2个问题

@Aspect 拦截器无法注入其它servcie的问题,因为@aspect 的注解是ACJ编译器编译的,没有纳入spring的管理
需要增加:

1
<bean id="voucherAspectJ" class="net.keking.lbt.business.vou.VoucherAopHandler" factory-method="aspectOf"/>

从而纳入spring上下文容器

第3个问题

如果自定义注解在project中单独的module ,如lbt-aspects, 其它moudule如何引用此自定义注解
POM中需要修改:

1
2
3
4
5
6
7
8
9
10
11
12
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<configuration>
<aspectLibraries>
<aspectLibrary>
<groupId>net.keking.lbt</groupId>
<artifactId>lbt-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
</plugin>