一、成员变量注入
@RequestMapping("test")
@RestController
public class TestController {
@Autowired
private Cat cat;
@RequestMapping("say")
private String login(){
return cat.sayHello();
}
}
二、构造函数注入
@RequestMapping("test")
@RestController
public class TestController {
private final Cat cat;
public TestController(Cat cat) {
this.cat = cat;
}
@RequestMapping("say")
private String login(){
return cat.sayHello();
}
}
三、set注入
@RequestMapping("test")
@RestController
public class TestController {
private Cat cat;
@Autowired
public void setCat(Cat cat) {
this.cat = cat;
}
@RequestMapping("say")
private String login(){
return cat.sayHello();
}
}
四、@Qualifier的作用
因为cat和dog两个类都实现了say接口属于同一类型,所以注入的时候必须通过@Qualifier指定一个bean的名字
@RequestMapping("test")
@RestController
public class TestController {
@Qualifier("cat")
@Autowired
private Say say;
@RequestMapping("say")
private String login(){
return say.sayHello();
}
}
五、@Autowire和@Resource的区别
1.提供方不同
@Autowired 是Spring提供的,@Resource 是J2EE提供的。
2.装配时默认类型不同
@Autowired只按type装配,@Resource默认是按name装配。
3、使用区别
(1)@Autowired与@Resource都可以用来装配bean,都可以写在字段或setter方法上
(2)@Autowired默认按类型装配,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。如果想使用名称装配可以结合@Qualifier注解进行使用。
(3)@Resource,默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行名称查找。如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
总结
以上为个人学习过程中对java的一些学习总结,如有错误,欢迎各位批评指导,如有侵权,请联系本人删除,如果觉得有一点帮助麻烦点个赞加收藏!谢谢!