我创建了一个Aspect但它似乎没有工作,我在日志中看不到任何内容,也没有错误消息或日志中的任何帮助我的内容。
存储库被Spring自动装配到另一个bean中,这样可以使组件扫描工作。 Aspect位于正在扫描的包中。我在classpath上有aspectj。
方面:
@Aspect
@Component
public class LoggingAspect {
private static Logger logger = Logger.getLogger(LoggingAspect.class);
@Before("execution(* nl.bar.repository.*.*(..))")
public void logIt(JoinPoint joinPoint) {
logger.debug("WE'RE LOGGING IT!!!!");
}
}
Spring bean:
package nl.bar.repository
@Component
public class BarRepository {
public List<Bar> findBar() {
....
}
}
的ApplicationContext:
<context:annotation-config />
<context:component-scan base-package="nl.bar" />
<aop:aspectj-autoproxy/>
的Maven:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
答案 0 :(得分:1)
您必须省略一些Maven依赖项,因为没有spring-context
代码不应该编译。添加spring-context
,代码按原样运行。
这是我对错误的猜测:方面包/类的日志记录级别未设置为debug。
这是我的版本,以及一些成功的输出,基本上没有任何变化:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.11</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
</dependencies>
applicationContext.xml
文件保持不变,Java也是如此,除了我的存储库类只是:
@Component("repo")
public class BarRepository implements Repo {
public String findBar() {
return "Hello!";
}
}
完整性检查main
如下:
public static void main(String[] args) {
LOG.debug("Initializing context...");
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
LOG.debug("Retrieving bean...");
Repo repo = (Repo) context.getBean("repo");
LOG.debug("Calling bean...");
System.out.println(repo.findBar());
}
我通过org.springframework.aop
的{{1}}和DEBUG
的方面类获得了以下输出:
INFO
我认为这是一个日志级问题,或者它没有像你想象的那样编译,因为它应该按照书面形式工作。