gpt4 book ai didi

java - 多模块 Maven 项目中的 AOP 方面

转载 作者:行者123 更新时间:2023-12-02 08:37:35 24 4
gpt4 key购买 nike

我有一个多模块 Maven 项目,并在我的一个模块中配置了 Spring AOP。不幸的是,AOP 只适用于它所在的项目。这是我的 Maven 配置:

父级pom.xml:

<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>1.3.6.RELEASE</version>
</parent>

<modules>
<module>rabbitmq</module>
<module>rss_parser</module>
</modules>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

第一个模块(我的 AOP 配置所在):

 <groupId>com.rss.rabbitmq</groupId>
<artifactId>rabbitmq</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>rabbitmq</name>

<parent>
<groupId>gpw.radar.rss</groupId>
<artifactId>parent-module</artifactId>
<version>1.0</version>
</parent>

<properties>
<java.version>1.8</java.version>
<rss.parser.version>1.0-SNAPSHOT</rss.parser.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.rss.parser</groupId>
<artifactId>rss-parser</artifactId>
<version>${rss.parser.version}</version>
</dependency>
</dependencies>

第二个模块(AOP 不起作用):

<groupId>com.rss.parser</groupId>
<artifactId>rss-parser</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>rss_parser</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<rometools.version>1.7.0</rometools.version>
<jackson-datatype-jsr310.version>2.6.1</jackson-datatype-jsr310.version>
<jackson-databind.version>2.6.6</jackson-databind.version>
</properties>

<parent>
<groupId>gpw.radar.rss</groupId>
<artifactId>parent-module</artifactId>
<version>1.0</version>
</parent>

<dependencies>
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome-fetcher</artifactId>
<version>${rometools.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson-datatype-jsr310.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind.version}</version>
</dependency>
</dependencies>

最后是第一个模块中的 Spring AOP 配置:

@Pointcut("within(com.rss.rabbitmq.cron..*) || within(com.rss.rabbitmq.sender..*) || within(com.rss.parser..*)")
public void loggingPointcut() {
}

我在这方面使用了切入点:

@Around("loggingPointcut()")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
// <<implementation>>
}
经过一番挖掘,我明白如果我在类路径中有 myproject/jar 它应该可以正常工作,但在我的情况下它不起作用。第一个模块的 AOP,因此对于 "within(com.rss.rabbitmq.cron..*) || inside(com.rss.rabbitmq.sender..*)" 可以正常工作但对于第二个项目则不然。

此外,我试图更改包名称,因为第一部分是相同的,我认为这可能会导致问题,但事实并非如此。

最佳答案

终于找到问题出在哪里了。来自spring aop文档:

If you only need to advise the execution of operations on Spring beans, then Spring AOP is the right choice. If you need to advise objects not managed by the Spring container (such as domain objects typically), then you will need to use AspectJ.

由于我的第二个模块根本不使用 spring,所以我应该使用 AspetJ 而不是 spring 方面。

关于java - 多模块 Maven 项目中的 AOP 方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39055588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com