新建茶叶网站文章内容建设,wordpress网站很慢,网站建设采购项目合同书,网页设计师常逛网站我们知道#xff0c;spring容器里面的bean默认是单例的#xff0c;所以id是唯一的。但是需要注意#xff0c;同一类型的bean可以有不同的id#xff0c;比如有id1-bean#xff0c;也可以有id2-bean。
下面再来详细回答一下文章的问题。
首先#xff0c;在同一个…我们知道spring容器里面的bean默认是单例的所以id是唯一的。但是需要注意同一类型的bean可以有不同的id比如有id1-bean也可以有id2-bean。
下面再来详细回答一下文章的问题。
首先在同一个XML配置文件里面不能存在id相同的两个bean否则spring容器启动的时候会报错。
因为id这个属性表示一个Bean的唯一标志符号所以Spring在启动的时候会去验证id的唯一性一旦发现重复就会报错
这个错误发生Spring对XML文件进行解析转化为BeanDefinition的阶段。
但是在两个不同的Spring配置文件里面可以存在id相同的两个bean。 IOC容器在加载Bean的时候默认会多个相同id的bean进行覆盖。
在Spring3.x版本以后这个问题发生了变化
我们知道Spring3.x里面提供Configuration注解去声明一个配置类然后使用Bean注解实现Bean的声明这种方式完全取代了XMl。
在这种情况下如图如果我们在同一个配置类里面声明多个相同名字的bean在Spring IOC容器中只会注册第一个声明的Bean的实例。后续重复名字的Bean就不会再注册了。像这样一段代码在Spring IOC容器里面只会保存UserService01这个实例后续相同名字的实例不会再加载。 如果使用Autowired注解根据类型实现依赖注入因为IOC容器只有UserService01的实例所以启动的时候会提示找不到UserService02这个实例。 如果使用Resource注解根据名字实现依赖注入在IOC容器里面得到的实例对象是UserService01于是Spring把UserService01这个实例赋值给UserService02就会提示类型不匹配错误。 这个错误是在Spring IOC容器里面的Bean初始化之后的依赖注入阶段发生的。 关于Autowired注解和Resource注解的区别可以查看我之前的文章Autowired注解与Resource注解的区别