2014-10-28 64 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教程,大量的在互联网上。