Spring AOP не работает в мультимодульной среде Maven - PullRequest
3 голосов
/ 12 сентября 2011

У меня есть приложение 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 не перехватывается.

Когда я храню все файлы в одном модуле, он работает.

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

...