草庐IT

Spring bean注入问题:NoUniqueBeanDefinitionException解决方案归纳

引言   spring实现的bean自动注入在项目开发中是一个经常使用到的功能,但自动装配两个或多个bean时,会抛出NoUniqueBeanDefinitionException:Noqualifyingbeanoftype'com'available:expectedsinglematchingbeanbutfound2异常。最常见的现象就是一个接口有两个实现类。spring允许一个类创建两个或多个bean。但如果bean是自动装配的,就会抛出异常。原因分析    spring应用程序启动时,应用程序将beans加载到ApplicationContext中,接着添加依赖bean生成其他类型

Spring IOC官方文档学习笔记(七)之Bean Definition继承

1.BeanDefinition继承(1)Spring中的bean存在层级关系,我们可以定义子bean来继承或覆盖父bean中的某些属性,从而节省编码,在此处Spring运用到了模板设计模式,如下所示//自定义了2个bean,ExampleA和ExampleB,注意,它们之间不存在继承关系,我们这里的继承注意是BeanDefinition继承,也就是一个bean的一些属性值可能跟另一个bean的某些属性值相同,然后通过BeanDefinition继承来减少编码,复用一下属性值,仅此而已publicclassExampleA{privateStringname;privateintage;pub

Spring IOC官方文档学习笔记(七)之Bean Definition继承

1.BeanDefinition继承(1)Spring中的bean存在层级关系,我们可以定义子bean来继承或覆盖父bean中的某些属性,从而节省编码,在此处Spring运用到了模板设计模式,如下所示//自定义了2个bean,ExampleA和ExampleB,注意,它们之间不存在继承关系,我们这里的继承注意是BeanDefinition继承,也就是一个bean的一些属性值可能跟另一个bean的某些属性值相同,然后通过BeanDefinition继承来减少编码,复用一下属性值,仅此而已publicclassExampleA{privateStringname;privateintage;pub

bean的作用域解析

说明  意义    1.在Spring中,Bean的作用域可以通过scope属性来指定。      2.指定作用域的目的是存储在此类单例bean的高速缓存中,并且对该命名bean的所有后续请求和引用都返回该高速缓存的对象。(本身的理念就是以空间换时间的思维,创建步骤繁杂,而且频繁用到,我就存起来,下次用的时候就不用了创建了)      3.了解了目的之后,自然也就有了多种类型,大多数会使用singleton,当然也会有希望每次用到的就是新产生的故而出现prototype类型,还有就是某些范围经常用到,另一些范围不经常用到的,衍生了request和session的范围性质的单例  类型与范围  

bean的作用域解析

说明  意义    1.在Spring中,Bean的作用域可以通过scope属性来指定。      2.指定作用域的目的是存储在此类单例bean的高速缓存中,并且对该命名bean的所有后续请求和引用都返回该高速缓存的对象。(本身的理念就是以空间换时间的思维,创建步骤繁杂,而且频繁用到,我就存起来,下次用的时候就不用了创建了)      3.了解了目的之后,自然也就有了多种类型,大多数会使用singleton,当然也会有希望每次用到的就是新产生的故而出现prototype类型,还有就是某些范围经常用到,另一些范围不经常用到的,衍生了request和session的范围性质的单例  类型与范围  

Spring中获取bean的方式

1.获取bean在上图的测试类中我们是通过id来获取bean的。实际上获取bean的方式有很多种,下面我们就一一说明。1.1方式一:根据id获取由于id属性指定了bean的唯一标识,所以根据bean标签的id属性可以精确获取到一个组件对象。如开头中我们使用的就是这种方式。bean标签属性:id:设置bean的唯一标识class:设置bean所对应类型的全类名1.2方式二:根据类型获取用的比较多注意:当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个当IOC容器中一共配置了两个:会抛出异常:NoUniqueBeanDefinitionException若没有任何一个类型匹

Spring中获取bean的方式

1.获取bean在上图的测试类中我们是通过id来获取bean的。实际上获取bean的方式有很多种,下面我们就一一说明。1.1方式一:根据id获取由于id属性指定了bean的唯一标识,所以根据bean标签的id属性可以精确获取到一个组件对象。如开头中我们使用的就是这种方式。bean标签属性:id:设置bean的唯一标识class:设置bean所对应类型的全类名1.2方式二:根据类型获取用的比较多注意:当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个当IOC容器中一共配置了两个:会抛出异常:NoUniqueBeanDefinitionException若没有任何一个类型匹

【Spring】Bean注册类注解

@Configuration 同@Component,将标注的类作为一个组件,区别是会使用Cglib动态代理,因此使用该注解的类不能是final的与@Component的区别可见:Configuration和@Component的区别Cglib动态代理和JDK动态代理区别可见:Cglib动态代理和JDK动态代理的对比属性:value,一般用不到,会将该值传递给@ComponentproxyBeanMethods,是否代理@Bean方法,详见 Configuration和@Component的区别@Component将标注的类作为一个组件使用,单例属性: value,给组件起名,与@Resour

【Spring】Bean注册类注解

@Configuration 同@Component,将标注的类作为一个组件,区别是会使用Cglib动态代理,因此使用该注解的类不能是final的与@Component的区别可见:Configuration和@Component的区别Cglib动态代理和JDK动态代理区别可见:Cglib动态代理和JDK动态代理的对比属性:value,一般用不到,会将该值传递给@ComponentproxyBeanMethods,是否代理@Bean方法,详见 Configuration和@Component的区别@Component将标注的类作为一个组件使用,单例属性: value,给组件起名,与@Resour

sping入门介绍-bean标签的属性

bean标签的属性 1、基础属性  id:在容器中唯一  class:类全路径2、scope:对象作用范围singleton:单例默认prototype:多例request:session:globalSession:3、bean的初始方法和销毁方法标签属性init-method:初始化方法在创建对象时执行destroy-method:销毁方法在对象销毁时执行接口:publicvoidinit();publicvoiddestroy();实现类:publicvoidinit(){System.out.println("init......");}publicvoiddestroy(){Syst