java - AspectJ 加载时编织不起作用

标签 java spring maven aspectj load-time-weaving

我想配置我的 Spring 项目以使用 AspectJ 加载时编织。 我已完成以下操作:

  1. 添加了<context:load-time-weaver aspectj-weaving="on"/>在我的应用程序上下文中
  2. 在缓存中添加了aspectj
  3. 在我的 pom.xml 中添加了行

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-instrument</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>${org.aspectj.version}</version>
    </dependency>
    ...........
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <goals>
                    <project>test</project>
                </goals>
                <configuration>
                    <detail>true</detail>
                    <forkMode>once</forkMode>
                    <argLine>-javaagent:"${settings.localRepository}/org/springframework/spring-instrument/3.1.4.RELEASE/spring-instrument-3.1.4.RELEASE.jar"</argLine>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

我有一个测试,但失败了。

@Cacheable(value = CacheConstants.FORM_TEMPLATE)
public int getRandomInt(){
    return new Random().nextInt();
}

@Test
public void test(){
    int i = getRandomInt();
    assertEquals(i, getRandomInt());
}

有人可以解释为什么失败吗?很明显,加载时编织不起作用。

最佳答案

谢谢,M. Deinum!你的评论非常有用! 我重写了我的测试,如下

Dao对象

interface DaoObject {
    int getCachedNumber();
}

DaoObjectImpl

@Repository
public class DaoObjectImpl implements DaoObject {
    @Cacheable(value = CacheConstants.FORM_TEMPLATE)
    public int getRandomInt(){
        return new Random().nextInt();
    }

    @Override
    public int getCachedNumber() {
        return getRandomInt();
    }
}

我的测试现在看起来像

@Test
public void cacheTest(){
    assertEquals(daoObject.getCachedNumber(), daoObject.getCachedNumber());
}

一切都好。谢谢!

关于java - AspectJ 加载时编织不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23882961/

相关文章:

java - Spring mvc-来自数据库的下拉框选项

java - Maven - 编译主模块时未检测到

java - 如何配置 Maven 3 以使用抢占式授权?

java - 插件org.jooq.pro :jooq-codegen-maven or one of its dependencies could not be resolved

java - Spring Boot WS 和 JDBC 的对象名称无效 'INFORMATION_SCHEMA.SEQUENCES'

java - 如何使用 Commons FileUpload 设置用于存储文件上传的文件夹

spring - 为什么我的 Spring 3 Validator 验证模型上的所有内容?

java - 使用 Spring jdbctemplate 执行更新

java - 对常量使用接口(interface)还是类?

java - 仅限外部 IP 的 Tomcat SSL 重定向