@Autowired与@Resource区别

@Autowired与@Resource区别

@Resource和@Autowired都是Spring框架中用于自动注入依赖对象的注解。它们的主要区别如下:

@Autowired

@Autowired注解是由Spring提供的,它可以用来对构造方法、成员变量及方法参数进行标记,它能够根据对象类型完成自动注入

@Autowired默认按type自动装配

当注入的类型在容器中存在多个时,需要指定默认注入对象(@Primary注解标记的类),或者指定注入对象beanName(@Qualifier("beanName"))

@Autowired注解标记的变量注入时,在项目启动时,默认会校验是否存对应类型的bean,如果没有会报错,可以通过修改注解属性@Autowired(required = false)不做校验

代码示例如下

public interface StockService{

}

public interface StockService2{

}

@Service("StockServiceImpl1")
@Primary
public class StockServiceImpl1 implements StockService{

}

@Service("StockServiceImpl2")
public class StockServiceImpl2 implements StockService{

}

@Service
public class OrderServiceImpl{
    private StockService stockService1;

    @Autowired(required = false)
    private StockService2 stockService22;
    
    // 构造方法注入
    @Autowired
    public OrderServiceImpl(StockService stockService) {
        this.stockService1 = stockService;
    }

    // 成员变量注入
    @Autowired
    @Qualifier("StockServiceImpl2")
    private StockService stockService2;

    private StockService stockService3;

    // 方法参数注入
    @Autowired
    public void setStockService(StockService stockService) {
        this.stockService3 = stockService;
    }
}

@Resource

它是由JDK提供的,遵循JSR-250规范,是JDK 1.6及以上加入的新特性

与@Autowired不同的是,它适用于所有的Java框架,而@Autowired只适用于Spring

@Resource能够支持对象类型注入,也能够支持对象名称注入。

@Resource 有两个最重要的属性:name和type。

如果指定name,则从上下文中查找与名称(ID)匹配的Bean进行装配,如果找不到则抛出异常

如果指定type,则从上下文中找到与类型匹配的唯一Bean进行装配,如果找不到或者找到多个就会抛出异常

如果既没有指定name,也没有指定type,则自动按byName方式进行装配。如果没有匹配成功,则仍按照type进行匹配

@Resource支持成员变量,方法注入,不支持构造器注入

@Resource注解标记的变量注入时,在项目启动时,默认会校验是否存对应类型的bean,如果没有会报错

示例代码如下

@Service
public class OrderServiceImpl{
    // 成员变量注入
    @Resource(name = "StockServiceImpl2")
    private StockService stockService2;

    private StockService stockService3;

    // 方法参数注入
    @Resource
    public void setStockService(StockService stockService) {
        this.stockService3 = stockService;
    }
}

总结

因为目前 spring 不推荐使用 成员变量注入 @Autowired , 推荐使用构造器注入

为了日常简单方便使用,推荐使用@Resource

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值