web-dev-qa-db-ja.com

セッターで@Autowiredと@Required

次のようなコードの違いは何ですか?

class MyClass {
   @Autowired
   MyService myService;
}

そして、このようなコード:

class MyClass {
   MyService myService;

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

@Autowired注釈は、Beanを自動配線するときに使用されます。 @Autowiredはセッターに限定されません。コンストラクターとフィールドでも使用できます。フィールドで@Autowired注釈を使用すると、そのフィールドは、一致するデータ型を持つBeanに自動接続されます。

@Requiredは、特定のプロパティが設定されているかどうかを確認します。フィールドに@Requiredアノテーションが付けられていて、そのフィールドが設定されていない場合、org.springframework.beans.factory.BeanInitializationExceptionが返されます。

参照:

@ Autowiredの春の使用

Springの@Requiredアノテーションの推奨使用法

編集:「kryger」が指すように:@Autowiredアノテーションが付けられたフィールドは、事実上@Requiredでもあります(そのパラメーターを明示的にfalseに設定しない限り)。例えば:

@Autowired(required=false)
private ObjectType objectType;

注釈付きのフィールド@Autowiredで、一致するデータ型のBeanが使用できない場合、org.springframework.beans.factory.BeanCreationExceptionがスローされます。

35
Sudarshan_SMD

@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構成ファイルの情報によって依存関係を注入する必要がある場合に使用する必要があります。

例を挙げていただけますか?

さて、すでに非常に良い例があります このウェブサイト上 ここでも説明されています。

8
watchme