Spring@AutoWired注解⽤法解释(超级易懂)
@Autowired的应⽤场景
我们开启Spring服务的时候,它会根据声明先扫描配置⽂件中的bean(注解配置同理), 再根据bean中类的全限定名去寻它,⼀般为我们⾃⼰声明的pojo(实体类), 然后这时如果有@Autowired注解则会根据类型寻其它的被Spring托管的bean进⾏⾃动注⼊, 调⽤默认的构造函数。
⽤法解释
下⾯看⼀个简单的例⼦:
这⾥是⼀个spring项⽬的基本结构
我们有三个实体类并且都是spring的bean
Test⽅法
注意到我们这⾥的people类中的cat和dog上都标注了@Autowired,我们都很清楚对象的声明创建过程, 类似于people的组合类需要先创建cat对象和dog对象的实例, ⽽依靠spring的依赖注⼊(cat和dog已被spring托管), 我们再加上@Autowired, spring便会⾃动的为我们在bean中寻和注解下类型匹配的bean去进⾏⾃动注⼊。 借此机制我们可以省略掉set⽅法, 构造⽅法。
执⾏test⽅法
运⾏成功, 未报空指针异常, 说明cat和dog被⾃动创建及注⼊。
还有⼀个注意点是如果显⽰的定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空
@Autowired(required = false)
使⽤的位置
我们可以在类中属性上,⽅法上使⽤@Autowired注解, 其中⽤在⽅法上时spring会将参数依次寻bean注⼊, 需要注意的是参数⼀定都要到能够匹配的bean, 否则会报出异常
org.springframework.beans.factory.BeanCreationException
@Autowired和@Qualifier组合使⽤
如果您在bean中有相同的类的全限定名, 那么在应⽤@Autowired时按照逻辑来说就会出现歧义, 这时spring为我们准备了@Qualifier注解来解决这个问题。
public class People{
resource和autowired注解的区别@Autowired
@Qualifier(value = "cat11")
private Cat cat;
@Autowired
@Qualifier(value = "dog222")
private Dog dog;
private String name;
}
在这⾥由于spring⽆法由类型去装配了,使⽤@Qualifier可以通过byName⽅式去寻标准就是bean的id(唯⼀限定名)。
@AutoWired和@Resource的区别?
@AutoWired默认以类型进⾏查,@Resource默认以名称进⾏查
@AutoWired(required=false) + @Qualifier(“user”) == @Resource(name=“user”)其中@Resource注解是jdk1.6后才有的
结语
以上为个⼈的⼀点理解,说的可能不对欢迎指正。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论