【问题标题】:Spring 4 AOP aspect is never being called?Spring 4 AOP 方面永远不会被调用?
【发布时间】:2015-04-07 05:08:32
【问题描述】:

我正在使用 Spring 4 AOP,我创建的方面从未被调用,我无法弄清楚为什么会这样。看,我有这个客户端类:

package com.example.aspects;

public class Client {


    public void talk(){

    }
}

还有我的方面: 包 com.example.aspects;

import org.aspectj.lang.JoinPoint;
@Aspect
public class AspectTest {

    @Before("execution(* com.example.aspects.Client.talk(..))") 
    public void doBefore(JoinPoint joinPoint) {
        System.out.println("***AspectJ*** DoBefore() is running!! intercepted : " + joinPoint.getSignature().getName());
    }

}

我的配置文件:

package com.example.aspects;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@EnableAspectJAutoProxy
public class Config {

    @Bean
    public Client client(){
        return new Client();
    }

}

最后,de app

public class App {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(
                Config.class);
        Client client = (Client) appContext.getBean("client");
        client.talk();
    }
}

通过这种方式,我永远不会被 AspectTest doBefore() 方法“拦截”。你知道发生了什么吗?问候

【问题讨论】:

    标签: java spring aspectj spring-4 aspect


    【解决方案1】:

    您从未注册过您的@Aspect。添加对应的bean

    @Bean
    public AspectTest aspect() {
        return new AspectTest();
    }
    

    您还可以将您的类型设为@Component,并在您的@Configuration 类中添加适当的@ComponentScan

    【讨论】:

    • 我不敢相信我没有看到它。这太容易了。谢谢!
    猜你喜欢
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多