gpt4 book ai didi

spring-aop - @EnableAspectJAutoProxy 不适用于 proxyTargetClass=false

转载 作者:行者123 更新时间:2023-12-01 02:19:31 28 4
gpt4 key购买 nike

我是第一次学习 Spring AOP。

我在这个网站上阅读:
Site2
Site1

在此之后,我做了下一节课

主类:

public class App {

public static void main(String[] args) {

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(AppConfig.class);
context.refresh();

MessagePrinter printer = context.getBean(MessagePrinter.class);

System.out.println(printer.getMessage());
}
}

应用配置类:
@Configuration
@ComponentScan("com.pjcom.springaop")
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class AppConfig {

@PostConstruct
public void doAlert() {

System.out.println("Application done.");
}

}

方面类:
@Component
@Aspect
public class AspectMonitor {

@Before("execution(* com.pjcom.springaop.message.impl.MessagePrinter.getMessage(..))")
public void beforeMessagePointCut(JoinPoint joinPoint) {

System.out.println("Monitorizando Mensaje.");
}

}

和别的...

就像那个应用程序工作得很好,但是如果我把 proxyTargetClass 设置为 false。然后我得到下面的错误。
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.pjcom.springaop.message.impl.MessagePrinter] is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:318)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:985)
at com.pjcom.springaop.App.main(App.java:18)

为什么?

最佳答案

@EnableAspectJAutoProxy(proxyTargetClass=false)

表示将创建 JDK 动态代理以支持在对象上执行方面。因此,由于这种类型的代理需要一个类来实现你的接口(interface) MessagePrinter必须实现一些声明方法 getMessage的接口(interface).
@EnableAspectJAutoProxy(proxyTargetClass=true)

相反,指示使用 CGLIB 代理,它能够为没有接口(interface)的类创建代理。

关于spring-aop - @EnableAspectJAutoProxy 不适用于 proxyTargetClass=false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21514858/

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