AspectJ不使用没有接口的类

时间:2016-11-08 15:25:44

标签: java aspectj spring-aop

我正在尝试在调用@Entity注释的类的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"/>

如果我尝试切入一个接口,它可以正常工作,但它不适用于持久性类。我不知道是不是因为它们没有实现接口,或者因为@Entity注释令人不安。

1 个答案:

答案 0 :(得分:1)

为了在运行时创建代理,您的类应该具有接口,否则您应该配置cglib(就像您的情况一样)。 http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html