我很想知道这样的代码有什么区别:
class MyClass {
@Autowired
MyService myService;
}
和这样的代码:
class MyClass {
MyService myService;
@Required
public void setMyService(MyService val) {
this.myService = val;
}
}
当您想要自动装配bean时使用@Autowired
注释。 @Autowired
不仅限于二传手。它也可以与构造函数和字段一起使用。如果在字段上使用@Autowired
批注,则该字段将使用具有匹配数据类型的bean自动装配。
@Required
检查是否已设置特定财产。如果某个字段已使用@Required
注释进行注释且该字段未设置,则您将获得org.springframework.beans.factory.BeanInitializationException
。
参考:
Recommended usage of Spring's @Required annotation
编辑:正如'kryger'指出:用@Autowired
注释的字段实际上也是@Required
(除非你明确地将其参数设置为false)。例如:
@Autowired(required=false)
private ObjectType objectType;
对于已注释@Autowired
的字段,如果没有匹配数据类型的bean,则抛出org.springframework.beans.factory.BeanCreationException
。
@Autowired
与@Required
不同。
@Autowire
-Annotation(如代码示例中所示)告诉ApplicationContext(a.k.a Spring-IoC-Containter)注入所需的依赖项。 (无论如何,如果它通过使用注释或ApplicationContext的XML文件)。
@Required
-Annotation告诉ApplicationContext必须在XML文件(ApplicationContext的XML文件)中提及此属性,而不是通过使用XML-File注入依赖关系(或者课程)。但是Annotation本身并没有告诉注入依赖!注入完成是因为XML文件中提到了该属性。很高兴知道,你可能需要它。
在XML文件中提到属性我的意思是这样的配置:
<bean id="MyClass" class="com.myclasses.common.MyClass">
<property name="someProperty" value="ValueThatHasToBeInjected" />
</bean>
那么我为什么要在@Autowired-Annotation上使用它呢?
当必须通过XML配置文件中的信息注入依赖项时,应该使用它。
能给我举个例子?
好吧,已经有一个非常好的例子on this website.,这里也有解释。