提出问题
在使用 @Autowired
注解时,可否根据 id
注入某个对象?
解决问题
注解 @Autowired
搭配 @Qualifier
注解,可实现 根据 id
注入某个对象
此时与 @Resource
注解功能类似
源码
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Qualifier {
String value() default "";
}
使用
- 修饰 成员变量,此时必须搭配
@Autowired
使用 - 修饰 方法形参,可单独使用
作用:
根据 id
注入某个对象
属性:
value:指定要注入的 id
例子
上接:springboot教程-@Autowired详解(二)有多个匹配对象时
修改 StudentCtrl
@RestController
public class StudentCtrl {
@Autowired
@Qualifier("studentSrvImpl")//关键代码
private IStudentService studentSrv;
@Autowired
public StudentCtrl(){
System.out.println("StudentCtrl()构造方法");
}
@RequestMapping("/save")
public JsonResult save( Student student){
// System.out.println(student);
System.out.println(studentSrv);
studentSrv.save(student);
return new JsonResult(0,"保存成功!");
}
}
如果要注入 StudentSrvImpl 类对象,注解为:@Qualifier("studentSrvImpl")
如果要注入 StudentSrvImpl2 类对象,注解为:@Qualifier("studentSrvImpl2")
测试
启动不再报错,访问Controller也正常