1.结论:@Autowired 默认是按照byType进行注入的,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。
2.byType是什么?byName是什么?
2.1.@Autowired修饰变量
@Autowired
DataSource ds;
byType是DataSource(变量类型)
byName是ds(变量名)
2.2.@Bean修饰变量
@Bean public DataSource dataSource1() { return new DruidDataSource(); } @Bean public DataSource dataSource2(){ return new DruidDataSource(); }
byType是DataSource(方法返回值)
byName是dataSource1与dataSource2(方法名)
2.3.xml创建bean(之后再写)
3.解决冲突
3.1.byType相同,使用@Primary注解(优先级byType>@Primary>byName)
@Bean @Primary public DataSource dataSource1() { return new DruidDataSource(); } @Bean public DataSource dataSource2(){ return new DruidDataSource(); }
3.2.修改byName为指定名称(不修改变量名),@Qualifier("xxx")
@Autowired @Qualifier("dataSource1") DataSource ds;
另注:@Resource(这个注解属于J2EE的)的标签,默认是按照byName方式注入的
原文:https://www.cnblogs.com/SmilingEye/p/11178812.html