AspectJ 在没有界面的情况下无法使用 类
AspectJ not working with classes without interface
我正在尝试在调用 @Entity 标注的 class 的 setter 之前执行一个方法。
所以我现在有这个代码:
@Component
@Aspect
public class Observable {
@Before("execution(* br.com.persistence.Transaction.setStatus(..))")
public void beforeSetStatus(JoinPoint joinPoint) {
System.out.println(joinPoint.getSignature().getName());
}
}
我的pom.xml:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<complianceLevel>1.6</complianceLevel>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.5</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.8.5</version>
</dependency>
</dependencies>
</plugin>
并在 spring.xml 中添加:
<aop:aspectj-autoproxy proxy-target-class="true"/>
如果我尝试切入一个接口,它可以正常工作,但在持久性中不适用于 classes。我不知道是因为他们没有实现接口还是因为 @Entity 注释很麻烦。
为了在运行时创建代理,您的 class 应该有一个接口,否则您应该配置 cglib(就像您的情况一样)。
http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html
我正在尝试在调用 @Entity 标注的 class 的 setter 之前执行一个方法。 所以我现在有这个代码:
@Component
@Aspect
public class Observable {
@Before("execution(* br.com.persistence.Transaction.setStatus(..))")
public void beforeSetStatus(JoinPoint joinPoint) {
System.out.println(joinPoint.getSignature().getName());
}
}
我的pom.xml:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<complianceLevel>1.6</complianceLevel>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.5</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.8.5</version>
</dependency>
</dependencies>
</plugin>
并在 spring.xml 中添加:
<aop:aspectj-autoproxy proxy-target-class="true"/>
如果我尝试切入一个接口,它可以正常工作,但在持久性中不适用于 classes。我不知道是因为他们没有实现接口还是因为 @Entity 注释很麻烦。
为了在运行时创建代理,您的 class 应该有一个接口,否则您应该配置 cglib(就像您的情况一样)。 http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html