如果在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的注解

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐