• Spring注解@Resource和@Autowired区别


    一、相同点:

    @Autowired和@Resource作用基本相同,都是用于自动装配bean对象。都可以写在字段上,或写在setter方法上。

    二、不同点:

    1.出处不同

    @Autowired(Spring注解,org.springframework.beans.factory.annotation.Autowired)

    @Resource(JAVA注解,javax.annotation.Resource)。适用范围广,依赖小。

     2.自动装配策略不同

    @Resource 默认优先名称匹配, 具体装配策略如下:

    • 如果同时指定了name和type,则从Web容器上下文中找到唯一匹配的bean进行装配,找不到则抛出异常 。
    • 如果指定了name,则从上下文中查找名称匹配的bean进行装配,找不到则抛出异常 。
    • 如果指定了Type,则从上下文中查找类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。
    • 如果既没有指定name,也没有指定type,则将通过反射机制(当注解标注在字段上,即默认读取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认读取属性名作为bean名称寻找依赖对象。)使用byName自动注入策略进行装配;如果没有匹配,则会按照类型装配(对于字段注释,默认值为字段的类型。对于方法注释,默认值为JavaBean属性的类型。);都找不到则抛出异常。
     @Resource(name="systemDictService")
     private SystemDictService systemDictService;

    @Autowired

    默认是按照类型来注入的,需要按名字注入的话可以跟@Qualifier搭配使用。

    @Qualifier作用为限定描述符,用于细粒度选择候选者,说人话就是注入的时候可能发现有多个可注入对象,比如说一个Service接口有3个实现类,分别为impl1,impl2,impl3,你注入service的时候注入的是接口,那么就可以通过@Qualifier(“你要注入的bean的名称”)来选择注入对象。

    实现类1:
    @Service("menuService1")
    public class MenuServiceImpl implements IMenuService {
        @Autowired
        private MenuMapper mapper;
    }
    
    实现类2:
    @Service("menuService2")
    public class MenuServiceImpl implements IMenuService {
    
    }
    
    
    注入1:
    @Autowired
    @Qualifier("menuService1")
    private IMenuService menuService;
    
    注入2:
    @Autowired
    @Qualifier("menuService2")
    private IMenuService menuService;

     3.其他区别

    @Autowired可以为null。可以设置它的required属性为false。

    @Autowired(required=true):当使用@Autowired注解的时候,其实默认就是@Autowired(required=true),表示注入的时候,该bean必须存在,否则就会注入失败。

    @Autowired(required=false):表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错。

    场景:在容器的启动过程中,会初始化很多bean,这也是spring的核心之一(IOC)。但是在注入的过程中,扫描到公共方法中要注入的bean,并未找到,强行注入就会注入失败。我们又不能单独的去除改方法,所以我们采取的思想就是有bean就注入,没有就不注入。解

    决办法就是@Autowired(required=false)。

    @Resource还可以对类注解。

     
  • 相关阅读:
    腾讯微博登录组件
    daffodil
    素数是个什么东西 prime number
    sama5d3 xplained 文件系统配置IP,系统复位后IP丢失[已解决]
    sama5d3 xplained 系统加载后确认使用的网口
    SAMA5D3 Xplained 开发板烧写官方固件后启动失败【已解决】
    linux文件系统解压 tar: Exiting with failure status due to previous errors [Solved]
    安装POSIX man 手册
    老子《道德经》第四十三章
    老子《道德经》第四十二章
  • 原文地址:https://www.cnblogs.com/wmy666/p/12681310.html
Copyright © 2020-2023  润新知