【@Resource注解与@Autowired注解有什么差别? _spring 】 | IT修真院·坑乎
问题已收录 @Resource注解与@Autowired注解有什么差别?
我也踩过这个坑( 1 )
已统计您的踩坑,无需重复点击
回答(1)
spring
详细描述
编辑于2024-11-15
  • [西安|荣耀师兄]JAVA-郭靖
    0

    a提供方 @AutowiredSpring的注解,@Resourcejavax.annotation注解,而是来自于JSR-250J2EE提供,需要JDK1.6及以上。 
    b
    注入方式 @Autowired只按照Type 注入;@Resource默认按Name自动注入,也提供按照Type 注入; 
    c
    属性 
    @Autowired
    注解可用于为类的属性、构造器、方法进行注值。默认情况下,其依赖的对象必须存在(bean可用),如果需要改变这种默认方式,可以设置其required属性为false 
    还有一个比较重要的点就是,@Autowired注解默认按照类型装配,如果容器中包含多个同一类型的Bean,那么启动容器时会报找不到指定类型bean的异常,解决办法是结合@Qualified注解进行限定,指定注入的bean名称。 
    @Resource
    有两个中重要的属性:nametypename属性指定byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。 
    需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。 

    d
    @Resource注解的使用性更为灵活,可指定名称,也可以指定类型 @Autowired注解进行装配容易抛出异常,特别是装配的bean类型有多个的时候,而解决的办法是需要在增加@Qualitied进行限定。


    编辑于2018-10-06