spring配置文件中bean name或者id相同所引起的问题
如果在spring的同一配置文件出现相同的id或name,会直接抛出异常,如果是在不同的配置文件中存在相同的id或name,那么后面加载的bean会覆盖前面的bean。 id或name相同,但不属于同一类型的bean,后面加载的bean也会覆盖前面的bean:这两个bean是在不同的配置文件里面,在加载spring容器的时候,第一个bean就会被覆盖掉,这个时候自动注入Stu...
如果在spring的同一配置文件出现相同的id或name,会直接抛出异常,如果是在不同的配置文件中存在相同的id或name,那么后面加载的bean会覆盖前面的bean。
id或name相同,但不属于同一类型的bean,后面加载的bean也会覆盖前面的bean:
这两个bean是在不同的配置文件里面,在加载spring容器的时候,第一个bean就会被覆盖掉,这个时候自动注入Student类型的bean会报错,
@Autowired() private Student student;
报异常:No qualifying bean of type 'com.spring.entity.Student' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
他说没有找到com.spring.entity.Student类型的bean,说明com.spring.entity.Student类型的bean已经被覆盖了。
com.spring.entity.Action类型的bean是可以正常注入的。
如果在spring的配置文件中存在类型相同但name或id不同,那么我们需要按名字注入这些bean:
1: @Autowired() private Student student;
@Autowired() private Student student1;
这两个实例分别对应上面两个bean,对象名对应bean的name。
2:
除了这种方法还可以使用@Resource(name = "xxxx")注解按名字注入,
@Resource(name = "student") private Student student;
3:
@Autowired()也可以指定对应的bean:
@Autowired() @Qualifier("bean名") private Student student1;
其中@Resource是java的注解,@Autowired是spring的注解
更多推荐
所有评论(0)