首页系统综合问题Spring注解艾特Resource和艾特Autowired区别对比(你了解多少)

Spring注解艾特Resource和艾特Autowired区别对比(你了解多少)

时间2022-12-28 07:31:54发布分享专员分类系统综合问题浏览137

今天小编给各位分享resource的知识,文中也会对其通过Spring注解艾特Resource和艾特Autowired区别对比(你了解多少)和@autowired和@resource的区别是什么?等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • Spring注解艾特Resource和艾特Autowired区别对比(你了解多少)
  • @autowired和@resource的区别是什么?
  • @autowired和@resource的区别
  • autowired和resource的区别
  • 一、Spring注解艾特Resource和艾特Autowired区别对比(你了解多少)

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

    1、共同点

    两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

    2、不同点

    (1)@Autowired

    查看源码:

    package org.springframework.beans.factory.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD})public @interface Autowired { boolean required() default true;}

    @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

    public class TestServiceImpl { // 下面两种@Autowired只要使用一种即可 @Autowired private UserDao userDao; // 用于字段上  @Autowired public void setUserDao(UserDao userDao) { // 用于属性的方法上 this.userDao = userDao; }}

    @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

    public class TestServiceImpl { @Autowired @Qualifier("userDao") private UserDao userDao; }

    当然,您也可以通过 @Autowired 对方法或构造函数进行标注,如果构造函数有两个入参,分别是 bean1 和 bean2,@Autowired 将分别寻找和它们类型匹配的 Bean,将它们作为 CountryService (Bean1 bean1 ,Bean2 bean2) 的入参来创建 CountryService Bean。来看下面的代码: 对方法

    public class Boss {  private Car car;  private Office office;   @Autowired  public void setCar(Car car) {  this.car = car;  }   @Autowired  public void setOffice(Office office) {  this.office = office;  }  … } 

    这时,@Autowired 将查找被标注的方法的入参类型的 Bean,并调用方法自动注入这些 Bean。而下面的使用方法则对构造函数进行标注:

    public class Boss {  private Car car;  private Office office;   @Autowired  public Boss(Car car ,Office office){  this.car = car;  this.office = office ;  }   … } 

    (2)@Resource

    查看源码:

    package javax.annotation;import java.lang.annotation.*;import static java.lang.annotation.ElementType.*;import static java.lang.annotation.RetentionPolicy.*;@Target({TYPE, FIELD, METHOD})@Retention(RUNTIME)public @interface Resource { String name() default ""; String lookup() default ""; Class type() default java.lang.Object.class; enum AuthenticationType { CONTAINER, APPLICATION } AuthenticationType authenticationType() default AuthenticationType.CONTAINER; boolean shareable() default true; String mappedName() default ""; String description() default "";}

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

    注:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

    @Resource装配顺序:

    ①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

    ②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

    ③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

    ④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

    例如以下写法都对:(当然下面只是写在成员变量中,也可以写在set方法上)

     @Resource(type = cn.qlq.service.UserService.class) private UserService userService;
     @Resource(name="userServiceImpl") private UserService userService;
     @Resource private UserService userService;

    总结:

    @Resource默认按照名称方式进行bean匹配(byName),@Autowired默认按照类型方式进行bean匹配(byType)@Resource(import javax.annotation.Resource;)是J2EE的注解,@Autowired( import org.springframework.beans.factory.annotation.Autowired;)是Spring的注解

    Spring属于第三方的,J2EE是Java自己的东西。使用@Resource可以减少代码和Spring之间的耦合

    一、@autowired和@resource的区别是什么?

    区别:

    1、@Autowired注解由Spring提供,只按照byType注入;@resource注解由J2EE提供,默认按照byName自动注入。

    2、@Autowired默认按类型进行装配,@Resource默认按照名称进行装配。

    @Resource装配顺序:

    (1)如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

    (2)如果指定了name,则从Spring上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

    (3)如果指定了type,则从Spring上下文中找到类型匹配的唯一bean进行装配,找不到或找到多个,都抛出异常。

    (4)如果既没指定name,也没指定type,则自动按照byName方式进行装配。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。

    二、@autowired和@resource的区别

    区别:

    1、@Autowired注解由Spring提供,只按照byType注入;@resource注解由J2EE提供,默认按照byName自动注入。

    2、@Autowired默认按类型进行装配,@Resource默认按照名称进行装配。

    @Resource装配顺序:

    (1)如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

    (2)如果指定了name,则从Spring上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

    (3)如果指定了type,则从Spring上下文中找到类型匹配的唯一bean进行装配,找不到或找到多个,都抛出异常。

    (4)如果既没指定name,也没指定type,则自动按照byName方式进行装配。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。

    三、autowired和resource的区别

    autowired和resource的区别:

    1、@Autowired注解由Spring提供,只按照byType注入;@resource注解由J2EE提供,默认按照byName自动注入。

    2、@Autowired默认按类型进行装配,@Resource默认按照名称进行装配。

    3、如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

    4、如果指定了name,则从Spring上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

    5、如果指定了type,则从Spring上下文中找到类型匹配的唯一bean进行装配,找不到或找到多个,都抛出异常。

    6、如果既没指定name,也没指定type,则自动按照byName方式进行装配。

    在逻辑上与应用程序一起部署的任何不可执行的数据。资源可以在应用程序中作为错误信息显示,或者作为用户界面的一部分显示。资源可以包含多种形式的数据,包括字符串、图像和持久的对象等。

    @Autowired是一种注解,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,@Autowired标注可以放在成员变量上,也可以放在成员变量的set方法上,也可以放在任意方法上表示,自动执行当前方法,如果方法有参数,会在IOC容器中自动寻找同类型参数为其传值。

    这里必须明确:@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用。

    关于resource的问题,通过《@autowired和@resource的区别》、《autowired和resource的区别》等文章的解答希望已经帮助到您了!如您想了解更多关于resource的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    resource
    受微软信任的交叉证书已过期,如何再给内核驱动数字签名 Win10重置电脑和重装系统哪个好?系统重置和重装有什么区别?