2014-10-28 18 views
0

的Java +春+ Maven的應用程序:的Java +春+ Maven的 - AspectJ實現的,而不是SpringAOP

有人可以給我提供的鏈接,或者告訴我一個純粹的AspectJ實現不基於代理的Spring AOP的?

我的應用程序純粹是基於Spring + Maven的。我目前使用Spring AOP實現了一些方面,但這並不能解決我的問題。

如果我嘗試訪問public method1()中的private method2(),但它不支持相同的class A。我想知道: 1)如何用支持intraclass方法調用的切入點編寫aspectj? 2)如何使用AspectJ加載時編織將其配置到我當前的Spring,maven項目中? 3)如何在Tomcat server + eclipse中爲編譯時編織配置AspectJ Maven插件。

@Controller 
class A { 
    public void method1() { 
     method2("foo"); 
    } 

    private String method2(String text) { 
     return text; 
    } 
} 

預期輸出:

log.entering(method1) 
log.entering(method2) 
print abc 
log.exiting(method2) 
log.exiting(method1) 
+0

目前還不清楚什麼不起作用。爲你的問題添加更多細節(例如方面)。 – 2014-10-28 18:45:34

+2

我編輯了這個問題,使它有點讓人理解。很顯然,Spring AOP不會與類內方法調用一起工作,無論目標方法是公共還是私有方法,因爲它們不通過動態代理進行路由。到目前爲止,如此真實。原生AspectJ也將解決您的問題。但是你想知道什麼?如何用切入點和建議書寫一個方面?或者如何配置Spring以使用AspectJ加載時織入?或者如何爲編譯時編織配置AspectJ Maven Plugin?請更新問題。 – kriegaex 2014-10-28 23:01:19

+0

我想知道:1)如何用支持intraclass方法調用的切入點編寫aspectj? 2)如何使用AspectJ加載時編織將其配置到我當前的Spring,maven項目中? 3)如何在Tomcat server + eclipse中爲編譯時編織AspectJ Maven Plugin。 – Chuck 2014-10-29 14:18:55

回答

0

我對你的建議是,以與Spring Roo的(所以你可以看到Maven的pom.xml中和Spring applicationContext.xml文件的外觀)和虛設項目下載正確安裝了AspectJ的Eclipse的Spring STS版本。

0

通過右鍵單擊 - 配置 - 轉換爲AspectJ項目,可以將Maven項目轉換爲AspectJ項目,從而一起使用Maven和AspectJ項目。從那裏你可以使用註釋來創建沒有註釋的Aspect類或Aspect的Java類。

至於你想要的結果,你可以使用大約方法如下圖所示:

@Around("execution (* A.method1(..))") 
    public void captureMethodOne(ProceedingJoinPoint joinPoint) throws Throwable{ 
    System.out.println("log.entering(method1)"); 
    joinPoint.proceed(); 
    System.out.println("log.exiting(method1)"); 
    } 

也不要忘記輸入AspectJ和在pom.xml AspectJ的Maven插件,如

<properties> 
    <maven.compiler.plugin.version>3.5.1</maven.compiler.plugin.version> 
</properties> 

<dependencies> 

    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>1.8.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>1.8.8</version> 
    </dependency> 
</dependencies> 


<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.8</version> 
      <configuration> 
       <complianceLevel>1.8</complianceLevel> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>${maven.compiler.plugin.version}</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

    </plugins> 
</build> 

希望它有幫助。 PS首先檢查AspectJ教程,大量的在互聯網上。