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