AspectJ время загрузки не работает

1

Я хочу настроить свой проект весны для работы с ткачеством времени AspectJ. Я сделал следующее:

  1. добавлен <context:load-time-weaver aspectj-weaving="on"/> в моем приложении contex
  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());
}

Может кто-нибудь объяснить, почему это не удается? Очевидно, что время перемотки нагрузки не работает.

  • 1
    Ваш @Cacheable находится на bean-компоненте, не управляемом пружиной, и поэтому не применим к loadtimeweavig. Это будет работать только для бобов, управляемых весной.
Теги:
maven
spring
aspectj
load-time-weaving

1 ответ

1
Лучший ответ

Спасибо, господин Дейн! Ваш комментарий очень полезен! Я переписал свой тест следующим образом

DaoObject

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());
}

Все в порядке. Благодарю!

  • 0
    Тестирование кэширования путем просмотра случайных значений - отличная идея!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню