2010-11-18 59 views
5

我想限定@Around方面的用於我的@Entity的方法彈簧+ AspectJ中,限定一個方面@Around

我的所有實體都是在包裝data.entity

甲像這樣定義一個方面:

@Aspect 
public class TestAspect { 

    @Around("execution(* data.entity..*(..))") 
    public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable { 
     System.out.println("INTERCEPT: "+pjp.toLongString()); 
     return pjp.proceed(); 
    } 
} 

但從未被截取......我的錯誤在哪裏?

在Spring XML中,我有這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:aop="http://www.springframework.org/schema/aop" 

     xsi:schemaLocation= 
     "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 

    <context:component-scan base-package="data.dao, data.service" /> 

    <tx:annotation-driven proxy-target-class="true"/> 

    <aop:aspectj-autoproxy/> 

    <bean id="testAspect" class="spring.TestAspect" /> 

    ... datasource and other ... 

</beans> 

我嘗試也

@Around("target(data.entity.MyEntity)") 

@Around("target(data.entity..)") 

,但還是不行。

謝謝。

回答

3

它看起來像你使用spring-proxy-aop。這隻有在類是Spring管理bean時纔有效,並且必須從其他對象調用adviced方法。

嘗試使用真正的aspectJ而不是spring-proxy-aop。

0

使用AOP我剛開始和下面是我的水平

  1. 我假設你有必要的JAR文件,aspectjweaver-1.6.10.jar和org.springframework.aop-3.0的結果。 5.RELEASE.jar出現在您的應用程序類路徑中。

  2. aroundAdvice方法,正如您現在定義的那樣完美。

  3. 您能刪除下面的行並嘗試。

    <上下文:組分掃描基包= 「data.dao,data.service」/ >