Spring 自动注入机制 和 常见注释
作者:互联网
Spring 自动注入机制
☀️ @Autowired (常用,最佳方式)
会根据注入的变量名字来寻找合适的 Bean。
❗ @Qualifier
用于解决注入冲突的,如下例子:
@Component
public class FooExample implenments Example(){
public String example(){
return "foo";
}
}
@Component
public class BarExample implenments Example(){
public String example(){
return "bar";
}
}
@Component
public class FooService(){
// 有注入异常,找不到唯一 Bean
@Autowired
private Example example;
}
// todo
如果尝试加载 FooService到上下文,那么会出现 NoUniqueBeanDefinationException
。因为 Spring 不确定要注入哪个。
用 @Qualifier 可以解决,如下:
@Component
@Qualifier("fooExample")
public class FooExample implenments Example(){
public String example(){
return "foo";
}
}
@Component
@Qualifier("barExample")
public class BarExample implenments Example(){
public String example(){
return "bar";
}
}
@Component
public class FooService(){
// 此时即可唯一指定 Bean
@Qualifier("fooExample")
private Example example;
}
@Primary
使用 @Primary 注释的 Bean 总会被默认注入。但 @Qualifier 和 @Primary同时存在,则 @Qualifier > @Primary,因为前者唯一指定了。
@Component
// @Primary 默认注入 FooExample
@Primary
public class FooExample implenments Example(){
public String example(){
return "foo";
}
}
@Component
public class BarExample implenments Example(){
public String example(){
return "bar";
}
}
@Component
public class FooService(){
@Autowired
private Example example;
}
@Component
用于标记一个组件,当类不属于@Service、@Controller、@Repository 等,就可以标记该类。
开发常见三件套:
@Controller(注入服务):控制层
@Service(注入dao):服务层
@Repository(实现dao访问):数据访问层
结束语
Be better than before, never stop thinking!
参考
https://www.cnblogs.com/felordcn/p/12142471.html
标签:Qualifier,Spring,class,Component,Example,注释,example,public,注入 来源: https://www.cnblogs.com/acChris/p/15334401.html