【问题标题】:Aspect not excecuting at runtime (Spring 3, AspectJ)方面在运行时不执行(Spring 3,AspectJ)
【发布时间】:2011-11-13 05:46:19
【问题描述】:

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

存储库被 Spring 自动装配到另一个 bean 中,因此组件扫描工作正常。 Aspect 在被扫描的包内。我在类路径上有 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/>

马文:

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

【问题讨论】:

    标签: java spring annotations aop aspectj


    【解决方案1】:

    您必须遗漏一些 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());
    }
    

    我得到以下输出,org.springframework.aopDEBUG 登录,我的方面类在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!
    

    我打赌它要么是日志级别的问题,要么没有像你想象的那样编译,因为它应该按书面形式工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 2014-10-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多