@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
全称javax.annotation.Resource,它属于JSR-250规范的一个注解,包含Jakarta EE(J2EE)中。Spring提供了对该注解的支持。我们来详细了解一下该注解的规则。
该注解使用在成员属性和setter方法上。默认情况下@Resource按照名称注入,如果没有显式声明名称则按照变量名称或者方法中对应的参数名称进行注入。
查找原则:
先根据名称查找,然后根据类型查找,然后Qualifier约束,查找失败后抛出异常
从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来达到同样的效果。