У меня есть приложение Java, построенное на Spring 3.
Мой аспект ConsumerAspect.java
находится в отдельном модуле maven, который называется Aspect
. Он имеет до совета и pointcut, как:
@Before("execution(* handle(..)) && args(inMessage,..)")
И метод handle()
находится в другом классе с именем EndpointListener.java
в другом модуле maven, который называется Endpoint.
Я использую время загрузки и мой aop.xml
выглядит так:
<aspectj>
<weaver options="-verbose">
<!-- only weave classes in our application-specific packages -->
<include within="com.sabre.svm.ods.app.*"/>
<include within="com.sabre.svm.producer.messaging.*"/>
</weaver>
<aspects>
<!-- weave in just this aspect -->
<aspect name="com.sabre.svm.ods.app.OdsConsumer"/>
</aspects>
</aspectj>
Как указано выше, первое включение в элемент ткача является аспектом, а второе включение в элемент ткача указывает на пакет, который содержит EndpointListener.java
.
Моя весна applicationContext.xml
Файл содержит
<context:load-time-weaver aspectj-weaving="on"/>
<bean id="odsConsumerAspect" class="com.sabre.svm.ods.app.OdsConsumer">
</bean>
В pom.xml
модуля Aspect
я использовал следующий плагин:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4</version>
<configuration>
<forkMode>once</forkMode>
<argLine>
-javaagent:C:/spring-agent-2.5.6.jar
</argLine>
<useSystemClassloader>true</useSystemClassloader>
</configuration>
</plugin>
И, наконец, я добавил модуль Aspect
в качестве зависимости в Endpoint
файле pom модуля.
Теперь, когда я запускаю приложение, метод handle
не перехватывается.
Когда я храню все файлы в одном модуле, он работает.
Я не могу понять, почему это не работает. Может кто-нибудь пролить свет.