在学AOP时getBean()获取bean时发生报错 No qualifying bean of type [com.spring.caculator.CaculatorImpl] is defined
public static void main(String args[]) {
//1.创建IOC容器
ApplicationContext ac= new ClassPathXmlApplicationContext("AnncationContext.xml");
//2.获取IOC容器中的bean实例
Caculator c = ac.getBean(CaculatorImpl.class);
//3.使用bean
}
经过尝试发现
通过名字获取getBean(“caculatorImp”);
以及通过接口类型获取getBean(Caculator.class)
都不会报错,但不知道原因
后来在一篇遇到相同问题的博客上找到原因,转载研究原文连接
造成问题的原因是要获取的bean 中 有被切入的方法。 就是可能该类会使用反射生成一个类。。
为什么 byTpe 无法获取bean ,因为它的类型根本就不是为什么 byTpe 无法获取bean ,因为它的类型根本就不是 com.spring.caculator.CaculatorImpl 而是 com.sun.proxy.$Proxy,至于为什么被 切 的 类 在spring 容器中的 type 变了, 那可能要考虑代理反射,可能是 spring 默认使用jdk 动态代理,这种方式会生成一个全新的类