@Resource、@Autowired和@inject的区别


1、@Autowired

    @Autowired通常适用于构造函数,成员变量以及方法上。

    @Autowired提供了required属性(默认值为true)以避免这种情况,设置@Autowired为false。

@Autowired(required = false)

    通过Java8的java.util.Optional来表明候选Bean可选。

    从Spring 5.0开始,您还可以使用@Nullable注解,这个注解可以你自己实现检测逻辑或者直接使用 JSR-305提供的javax.annotation.Nullable。

    从Spring Framework 4.3开始,@Autowired如果目标Bean只定义一个构造函数,则不再需要在该构造函数上添加@Autowired注解。如果目标Bean有几个构造函数可用,并且没有主/默认构造函数,则必须至少有一个构造函数被@Autowired标记,以指示Spring IoC容器使用哪个构造函数。

    查找原则:

        先根据类型查找,其次是Qualifier约束,然后是按名称,最后需要判断是否required


@Autowired查找流程



2、@Resource

    全称javax.annotation.Resource,它属于JSR-250规范的一个注解,包含Jakarta EE(J2EE)中。Spring提供了对该注解的支持。我们来详细了解一下该注解的规则。

    该注解使用在成员属性和setter方法上。默认情况下@Resource按照名称注入,如果没有显式声明名称则按照变量名称或者方法中对应的参数名称进行注入。

    查找原则:

        先根据名称查找,然后根据类型查找,然后Qualifier约束,查找失败后抛出异常

@Resource查找流程


3、@Inject

    从Spring 3.0开始,Spring提供对JSR-330标准注解(依赖注入)的支持。 你需要引入依赖:

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

    然后你就可以使用相关的注解来进行依赖注入了,其中主要注解为@javax.inject.Inject。大部分情况下该注解都可以代替@Autowired使用,但@Inject没有required属性,不过它也可以与java.util.Optional或使用@Nullable来达到同样的效果。




依赖注入 @Resource @Autowired @inject

2021.02.25 21:28

https://www.meihaocloud.com.com/1057.html , 欢迎转载,请在文章页标出原文连接 !


Copyright © 2020 千夕网 联系站长

粤公网安备 44030302001408号 粤ICP备19099833号-1