gpt4 book ai didi

java - 方面未在运行时执行(Spring 3、AspectJ)

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:15 25 4
gpt4 key购买 nike

我已经创建了一个方面,但它似乎不起作用,我在日志中看不到任何内容,也没有错误消息或日志中任何对我有帮助的内容。

存储库由 Spring Autowiring 到另一个 bean 中,这样组件扫描就可以工作。该方面位于正在扫描的包裹内。我的类路径中有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() {
....
}
}

应用程序上下文:

<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>

最佳答案

您必须省略一些 Maven 依赖项,因为如果没有 spring-context,代码就无法编译。添加spring-context,代码按原样工作。

这是我对问题的猜测:方面包/类的日志记录级别未设置为调试。

这是我的版本,以及一些成功的输出,基本上没有任何更改:

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

通过 DEBUG 处的 org.springframework.aop 日志记录以及 INFO 处的方面类,我得到以下输出:

DEBUG nl.main.Main - Initializing context...
INFO org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1125127: display name [org.springframework.context.support.ClassPathXmlApplicationContext@1125127]; startup date [Sat Nov 12 16:39:45 EST 2011]; root of context hierarchy
INFO org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
INFO org.springframework.context.support.ClassPathXmlApplicationContext - Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@1125127]: org.springframework.beans.factory.support.DefaultListableBeanFactory@89cc5e
INFO org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@89cc5e: defining beans [org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,repo,loggingAspect,org.springframework.aop.config.internalAutoProxyCreator]; root of factory hierarchy
DEBUG org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void nl.bar.aspects.LoggingAspect.logIt(org.aspectj.lang.JoinPoint)
DEBUG org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator - Creating implicit proxy for bean 'repo' with 0 common interceptors and 2 specific interceptors
DEBUG org.springframework.aop.framework.JdkDynamicAopProxy - Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [nl.bar.repository.BarRepository@1dec1dd]
DEBUG nl.main.Main - Retrieving bean...
DEBUG nl.main.Main - Calling bean...
INFO nl.bar.aspects.LoggingAspect - WE'RE LOGGING IT!!!!
Hello!

我敢打赌这要么是日志级别问题,要么它没有像您想象的那样编译,因为它应该按编写的方式工作。

关于java - 方面未在运行时执行(Spring 3、AspectJ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093899/

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