@Autowired vs @Required 在二传手

2022-09-01 11:49:19

我很想知道这样的代码有什么区别:

class MyClass {
   @Autowired
   MyService myService;
}

和类似如下的代码:

class MyClass {
   MyService myService;

   @Required
   public void setMyService(MyService val) {
       this.myService = val;
   }
}

答案 1

@Autowired当您想要自动连接 Bean 时,将使用注释。 不限于设定者。它也可以与构造函数和字段一起使用。如果对字段使用注释,则该字段将使用具有匹配数据类型的 Bean 自动连接。@Autowired@Autowired

@Required检查是否已设置特定属性。如果某个字段已使用注释进行了注释,但未设置该字段,则将获得 。@Requiredorg.springframework.beans.factory.BeanInitializationException

指:

弹簧@Autowired用法

Spring@Required注释的推荐用法

编辑:正如'kryger'所指出的:注释的字段也是有效的(除非你明确地将其参数设置为false)。例如:@Autowired@Required

@Autowired(required=false)
private ObjectType objectType;

对于已批注的字段,如果 数据类型匹配的 Bean 不可用,则抛出。@Autowiredorg.springframework.beans.factory.BeanCreationException


答案 2

@Autowired与 不同。@Required

@Autowire注释(如代码示例中所示)告诉 ApplicationContext(又名 Spring-IoC-Containter)注入所需的依赖项。(无论如何,如果通过使用注释或应用程序上下文的XML文件)。

@Required-Annotation告诉 ApplicationContext,必须在 XML 文件(ApplicationContext 的 XML-File)中提及此属性,这会导致使用 XML-File 注入依赖项(或者当然是预期)。但是注释本身并没有告诉注入依赖关系!注入之所以完成,是因为 XML 文件中提到了该属性。很高兴知道,你可能需要它。

在XML文件中提及该属性,我的意思是这样的配置,例如:

<bean id="MyClass" class="com.myclasses.common.MyClass">
     <property name="someProperty" value="ValueThatHasToBeInjected" />
</bean>

那么,为什么我应该在@Autowired注释中使用它呢?

当依赖项必须由 XML 配置文件中的信息注入时,应使用它。

你能给我举个例子吗?

好吧,这个网站上已经有一个非常好的例子。


推荐