1、如果Dao层的TestDao类中声明了@Repository,且@ComponentScan 添加了dao扫描,则默认会创建一个和类名一样且首字母小写的 testDao 在IOC容器中。
2、如果在config配置类中指定了Bean注解,此时:
a、如果Bean注解的方法名也是testDao ,则会覆盖默认对象
b、如果Bean注解的方法名或者声明的别名不是testDao ,则会新创建一个对象在IOC容 器中。
@Autowired 取值:
* 如果声明的变量是testDao ,则默认会去IOC容器中获取testDao对象。
* 如果声明的变量是Bean注解指定的别名或者方法名,则会去容器中获取Bean注解别名或者方法名。
如果声明 的变量不是以上两者,则会报错(解决方式是加Qualifier然后括号里填上都不是两者的变量,然后在 autowired后括号加required = false ) 这样拿到就是null对象里,不是报错了
*
* app.getBean():
* 如果在IOC容器中存在两个TestDao实例,则只能通过字符串名称来获取bean实例,如:app.getBean("testDao"),否则无法获取到对象, 有指定@Primary声明除外。
* 如果在IOC容器中只存在一个TestDao实例,则可以通过app.getBean(TestDao.class)获取bean对象。
*
@Primary 优先:
* 只要Primary出现,不管是Autowired 还是getBean取值,都会优先取到 @Primary 声明的那个容器对象实例,但是,
* 如果在Autowired中声明了@Qualifier("testDao"),则在Autowired 上的取值会优先Qualifiler对象,其他地方还是会去取Primary对象
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!