Spring Aspectj
maven jar
<aspectj-version>1.8.2</aspectj-version>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj-version}</version>
</dependency>
測試感覺spring-aop 和 spring-aspects 貌似沒什麼用
aspectjweaver 1.8.10 和 spring 4.3.2.RELEASE 有衝突
spring xml
<aop:aspectj-autoproxy proxy-target-class="true" />
如果針對Controller層,需要在spring-mvc中配置,否則不會起作用
配置在spring.xml 中會對service和dao層起作用
aspectJ
@Around 修改傳入參數
aspectJ 基於 @Annotation的使用
- 定義註解
@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface WriteLog {
public String value() default "";
}
- 在需要攔截的地方加入註解
@WriteLog(value = "用戶{}做了什麼操作")
public String init(HttpServletRequest request, Model model) {
//TODO 業務處理
return "tierOneManager/project/list";
}
- AspectJ 編織處理
@Before(value = "execution(* com.xxx.web.xxx..*(..))&&args(request)&&@annotation(writeLog)", argNames = "joinPoint,request,writeLog")
public void insertLog(JoinPoint joinPoint, HttpServletRequest request, WriteLog writeLog)
throws NoSuchMethodException {
if (null == writeLog) {
return;
}
String messageTpl = writeLog.value();
System.out.println(messageTpl);
System.out.println("xxx");
}