@Autowired vs @Required sur le poseur

Je suis curieux de savoir quelle est la différence entre un code comme celui-ci:

class MyClass { @Autowired MyService myService; } 

et code comme ceci:

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

@Autowired annotation @Autowired est utilisée lorsque vous souhaitez envoyer automatiquement un bean. @Autowired n’est pas limité au setter. Il peut également être utilisé avec un constructeur et un champ. Si vous utilisez @Autowired annotation @Autowired sur un champ, ce champ sera automatiquement associé au bean dont le type de données correspond.

@Required vérifie si une propriété particulière a été définie ou non. Si un champ a été annoté avec @Required annotation @Required et que ce champ n’est pas défini, vous obtiendrez org.springframework.beans.factory.BeanInitializationException .

Référer:

Spring @Autowired utilisation

Utilisation recommandée de l’annotation @Required de Spring

Edit: Comme indiqué par ‘kryger’: le champ annoté avec @Autowired est également @Required (sauf si vous définissez explicitement le paramètre requirejs sur false). par exemple:

 @Autowired(required=false) private ObjectType objectType; 

Pour un champ qui a été annoté @Autowired , si le bean avec le type de données correspondant n’est pas disponible, org.springframework.beans.factory.BeanCreationException est org.springframework.beans.factory.BeanCreationException .

@Autowired n’est pas la même chose que @Required .

@Required -Annotation est spécialisé pour indiquer à Spring que cette propriété doit être injectée à l’aide des informations fournies dans le fichier de configuration XML et non par des annotations. Et cela n’a pas d’importance lorsque vous utilisez @Autowire -Annotation.

Le @Autowire -Annotation (comme dans votre exemple de code) indique à ApplicationContext (aka Spring-IoC-Containter) d’injecter la dépendance souhaitée. (Peu importe comment, si c’est en utilisant des annotations ou le fichier XML de ApplicationContext).

Le @Required -Annotation indique à ApplicationContext que cette propriété doit être mentionnée dans le fichier XML (fichier XML de l’application ApplicationContext), mais l’annotation ne dit pas à elle seule d’injecter la dépendance. Il est donc utilisé pour vérifier s’il se trouve dans le fichier de configuration XML, mais pas pour injecter une dépendance. L’injection est effectuée car la propriété est mentionnée dans le fichier XML.

Donc, à la fin, cela indique que l’injection doit être effectuée à cause d’une configuration dans le fichier XML. Mais encore une fois: l’annotation ne dit pas que la dépendance doit être injectée, mais qu’elle doit être mentionnée dans le fichier XML, qui permet ensuite d’injecter la dépendance.

En mentionnant la propriété dans un fichier XML, je veux dire une telle configuration par exemple:

    

Alors, pourquoi devrais-je l’utiliser sur les @ Autowired-Annotation?

Vous devez l’utiliser lorsque la dépendance doit être injectée par les informations du fichier de configuration XML.

Peux-tu me donner un exemple?

Eh bien, il y a déjà un très bon exemple sur ce site. où cela est également expliqué.