spring配置文件中bean name或者id相同所引起的问题

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值