Aspect注释链接

时间:2015-07-04 21:21:28

标签: java maven aspectj aop

面向方面发展的新手。

两部分问题即将出现。

  1. 您是否有包含运行教程和代码的好网站? 到目前为止,我已经看过许多教程,但是代码碎片化,并没有什么可以拼凑在一起使它在本地工作。

  2. 我试图创建一个带有方面和aspectj类的框架,该类应该拦截所有使用方面注释的方法调用。 它在我的本地项目中运行良好但是当我尝试在另一个项目中使用该方面时,它似乎不起作用。

  3. 代码示例:Aspect拦截器

    @Aspect
    public class InterceptCallAspect {
        @Around("execution(* *(@InterceptCall (*)));")
        public void record(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
            //Before
            System.out.println("Before");
            proceedingJoinPoint.proceed();
            System.out.println("After");
            //After
        }
    }
    

    方面

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface InterceptAspectAnnotation {
    }
    

    因此,当我在项目中注释我的测试用例时,我会将sysout放在正确的位置。 但是,当我创建我的jar并将其捆绑在另一个项目中时,它什么都不做。

    我的pom文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>InterceptCall</artifactId>
    <groupId>testing</groupId>
    <packaging>jar</packaging>
    <version>0.0.2-SNAPSHOT</version>    
    <dependencies>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.7</version>
                <configuration>
                    <complianceLevel>1.8</complianceLevel>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

1 个答案:

答案 0 :(得分:2)

我只能解决你的第二个问题,所以我会留下第一个问题。

如果您通过外部库(如构建的jar)提供方面,则需要告诉aspectj-maven-plugin在哪里找到用于编织的方面。 配置 -tag需要包含一个名为 aspectLibraries 的标记,其中 aspectLibrary -tags用于每个要使用的lib:

www.abc.com/app2