2016-11-08 7 views
0

@Entityで指摘されたクラスのセッターが呼び出される前にメソッドを実行しようとしています。 は、だから私は今では、このコードを持っている:インタフェースを持たないクラスで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注釈が原因で問題が発生しているかどうかはわかりません。

+1

上記の設定では、Spring AOPと__not__ AspectJを使用していることに注意してください。 –

+0

Spring AOPで私が欲しいものを達成することはできますか?インターフェイスなしでクラスをポイントカットするには? –

+1

Spring AOPはSpring管理Beanにのみ適用されます。私は、あなたが何を側面に適用しようとしているのか分かりません。説明のためにこの質問を参照してください。http://stackoverflow.com/q/1606559/2699901 –

答えて

1

実行時にプロキシを作成するには、クラスにインターフェイスが必要です。そうしないと、(あなたの場合のように)cglibを構成する必要があります。 http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html

+0

TransactionクラスはBeanではありません。@Aspect、jayでポイント・カットできますか? –

+0

Spring AOPを使用している場合は、すべてのオブジェクトを「スプリング管理」する必要があります。 Springは実行時にプロキシを作成する必要があるため、それを「スプリングコンテキスト」内に構成しない限りはできません。しかし、他のユースケースでSpringを使用していない場合は、別のフレームワークであるAspectJを見ることを検討することができます。 AspectJでは、これを行うことができるはずです - http://stackoverflow.com/questions/1606559/spring-aop-vs-aspectj – jay

+0

私はSpringを@Configurableでオブジェクトを管理することができます。 AspectJ自体に移行するよりも簡単に作業できますか?私のプロジェクトでは、Hibernateによって管理されている永続性を除いて、どこでもSpringを使用しています –

関連する問題