上一题下一题

@Inject与@Autowired在required语义和限定符支持上的差别

进阶版
来源:netease中级工程师JSR-330标准注解依赖注入必填语义@Qualifier限定符@Inject与@Autowired注解
答案解析

@Inject 和 @Autowired 的主要差别在于 required 语义和限定符用法。

@Autowired 是 Spring 提供的注解,默认 required = true,也就是说容器中必须存在一个匹配的 Bean,否则启动或注入时会报错。可以通过 @Autowired(required = false) 表示依赖不是必须的,也可以配合 Optional<T 、@Nullable 等方式实现可选注入。

@Inject 来自 JSR 330,注解本身没有 required 属性,默认就是必须注入。如果没有找到匹配的 Bean,通常会导致注入失败。它不能像 @Autowired 一样直接写 required = false,如果需要可选依赖,一般使用 Optional<T 、Provider<T ,或者使用 Spring 提供的 ObjectProvider<T 等方式处理。

在限定符方面,@Autowired 通常配合 Spring 的 @Qualifier 使用:

```java @Au

登录后查看完整内容