没有Spring AOP开始使用aspectj

时间:2016-12-16 14:51:51

标签: java aspectj

我想在我的应用程序中加入AspectJ以了解它是如何工作的。一世 我不喜欢使用Spring AOP,而是使用“纯粹”的方面。

这就是我所拥有的:

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjrt</artifactId>
  <version>1.6.11</version>
</dependency>

package tmp;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class LoggingAspect {

    @Pointcut("execution(* *.*(..))")
    void anyMethodCall() {
    }

    @Before("anyMethodCall()")
    public void beforeMethod() {
        System.out.println("Aspect Before Method");
    }
}

当我执行我的应用程序时,不会打印该消息。

我理解它的方式,beforeMethod应该在整个项目中任何类的任何方法之前调用。

我猜我忘记了一些事情,但我还没有找到一个好的教程,但我很清楚它是如何工作的。

我在这里去哪里?

2 个答案:

答案 0 :(得分:1)

在Eclipse项目中,必须将项目类型更改为aspectj项目(右键在项目上 - &gt; AspectJ)

你需要在pom.xml

<dependencies>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
    </dependency>
</dependencies>
<build>
    <pluginManagement>
        <plugins>
            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <configuration>
                <complianceLevel>1.7</complianceLevel>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            </plugin>
            <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>
                                        org.codehaus.mojo
                                    </groupId>
                                    <artifactId>
                                        aspectj-maven-plugin
                                    </artifactId>
                                    <versionRange>
                                        [1.7,)
                                    </versionRange>
                                    <goals>
                                        <goal>compile</goal>
                                        <goal>test-compile</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

将你的切入点更改为&#34;!(tmp.LoggingAspect)&amp;&amp;执行(* (..))&#34;为了避免抓住他自己。

答案 1 :(得分:1)

在我的IDEA中,它已经内置了自13版本以来的aspectj插件。您应该做的下一步是更改Java编译器的设置。

Project Setting –> Compiler –> Java Compiler

“使用编译”:更改为Ajc;

“Ajc编译器的路径”:aspjectjtools.jar;

如果你没有罐子,请点击http://mvnrepository.com/artifact/org.aspectj以获得你想要的东西。

现在,运行你的程序,它会起作用。祝你好运!