项目结构为
spring-contract
spring-aop
作为(1)的依赖项] >>spring-service
作为(2)的依赖。我在@MyAnnotation
项目中有一个参数注释spring-contract
,在spring-aop
中是一个方面类,
package com.learning.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class AnnotatedFieldAspect { @Before("execution(* *(.., @MyAnnotation (*), ..)) && args(newValue)") public void advice(JoinPoint jp, Object newValue) { System.out.println(">>> inspecting "+newValue+" on "+jp.getTarget()+", "+jp.getSignature()); } }
注释将建议的类在
spring-service
项目中,
package com.learning.fieldtest.service; public class TestField { private String name; public String getName() { return name; } public void setName(@MyAnnotation String name) { this.name = name; } public static void main(String[] args) { TestField testField = new TestField(); testField.setName("Alex"); testField.m1(testField.getName()); System.out.println(testField.getName()); } public void m1(@MyAnnotation String string) { System.out.println("Inside m1() @MyAnnotation" + string); } }
类TestField方法未标记为建议的方法,如果我将所有类移动到同一包中,则会得到结果。还有在类和方法级别编写的其他方面正在应用。
>>> inspecting Alex on com.learning.fieldtest.service.TestField@3fa77460, void com.learning.fieldtest.service.TestField.setName(String) >>> inspecting Alex on com.learning.fieldtest.service.TestField@3fa77460, void com.learning.fieldtest.service.TestField.m1(String) Inside m1() @MyAnnotationAlex Alex
自定义注释
package com.learning.spring.contract;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface MyAnnotation {
}
项目结构是spring-contract spring-aop作为(1)的依存关系,spring-service是(2)的依存关系。我在spring-contract项目中有一个参数注释@MyAnnotation,在...
在您的spring config类之一中,添加@EnableAspectJAutoProxy。这将启用Spring应用程序中的外观处理。