次のようなコードの違いは何ですか?
class MyClass {
@Autowired
MyService myService;
}
そして、このようなコード:
class MyClass {
MyService myService;
@Required
public void setMyService(MyService val) {
this.myService = val;
}
}
@Autowired
注釈は、Beanを自動配線するときに使用されます。 @Autowired
はセッターに限定されません。コンストラクターとフィールドでも使用できます。フィールドで@Autowired
注釈を使用すると、そのフィールドは、一致するデータ型を持つBeanに自動接続されます。
@Required
は、特定のプロパティが設定されているかどうかを確認します。フィールドに@Required
アノテーションが付けられていて、そのフィールドが設定されていない場合、org.springframework.beans.factory.BeanInitializationException
が返されます。
参照:
編集:「kryger」が指すように:@Autowired
アノテーションが付けられたフィールドは、事実上@Required
でもあります(そのパラメーターを明示的にfalseに設定しない限り)。例えば:
@Autowired(required=false)
private ObjectType objectType;
注釈付きのフィールド@Autowired
で、一致するデータ型のBeanが使用できない場合、org.springframework.beans.factory.BeanCreationException
がスローされます。
@Autowired
は@Required
と同じではありません。
@Autowire
- Annotation(コード例のように)、ApplicationContext(別名Spring-IoC-Containter)に必要な依存関係を注入するよう指示します。 (どのようにしても、注釈またはApplicationContextのXMLファイルを使用する場合)。
@Required
- Annotationは、このプロパティがXMLファイル(ApplicationContextのXMLファイル)で言及される必要があることをApplicationContextに伝えます。 XMLファイルを使用して(または当然のことながら)。しかし、注釈だけでは依存関係を注入するように指示しません! プロパティはXMLファイルに記述されているため、注入が完了します。知っておくと便利です。
XMLファイルでプロパティに言及することで、たとえばそのような構成を意味します。
<bean id="MyClass" class="com.myclasses.common.MyClass">
<property name="someProperty" value="ValueThatHasToBeInjected" />
</bean>
だから、@ Autowired-Annotationで使用する必要があるのはなぜですか?
XML構成ファイルの情報によって依存関係を注入する必要がある場合に使用する必要があります。
例を挙げていただけますか?
さて、すでに非常に良い例があります このウェブサイト上 ここでも説明されています。