@Entity로 언급 된 클래스의 setter가 호출되기 전에 메소드를 실행하려고한다. 그래서 나는 지금이 코드를 가지고 :인터페이스가없는 클래스에서 AspectJ가 작동하지 않는다.
@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 어노테이션이 잘못 되었기 때문에 이것이 맞는지는 모르겠습니다.
위에서 설명한 구성을 사용하면 Spring AOP와 __not__ AspectJ를 사용하고 있음을 알아야합니다. –
Spring AOP로 원하는 것을 얻을 수 있습니까? 인터페이스없이 클래스를 pointcut하려면? –
Spring AOP는 스프링 관리 빈에만 적용됩니다. 나는 당신이 어떤 것을 적용하려고하는지 확신하지 못합니다. 설명에 대한이 질문을 참조하십시오. http://stackoverflow.com/q/1606559/2699901 –