Je suis curieux de savoir quelle est la différence entre un code comme celui-ci:
class MyClass {
@Autowired
MyService myService;
}
et un code comme celui-ci:
class MyClass {
MyService myService;
@Required
public void setMyService(MyService val) {
this.myService = val;
}
}
@Autowired
l'annotation est utilisée lorsque vous souhaitez câbler automatiquement un bean. @Autowired
n'est pas limité au setter. Il peut également être utilisé avec un constructeur et un champ. Si tu utilises @Autowired
annotation sur un champ, ce champ sera automatiquement câblé avec un bean ayant un type de données correspondant.
@Required
vérifie si une propriété particulière a été définie ou non. Si un champ a été annoté avec @Required
annotation et ce champ n'est pas défini, vous obtiendrez org.springframework.beans.factory.BeanInitializationException
.
Référer:
tilisation recommandée de l'annotation @Required de Spring
Edit: Comme indiqué par 'kryger': champ annoté avec @Autowired
est effectivement aussi @Required
(sauf si vous définissez explicitement son paramètre requis 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 lancé.
@Autowired
n'est pas la même chose que @Required
.
Le @Autowire
- L'annotation (comme dans votre exemple de code), indique à ApplicationContext (alias Spring-IoC-Containter) d'injecter la dépendance souhaitée. (Peu importe comment, si c'est en utilisant des annotations ou le fichier XML du ApplicationContext).
Le @Required
- Annotation , indique à ApplicationContext que cette propriété doit être mentionnée dans le fichier XML (The XML-File of the ApplicationContext), ce qui conduit à l'injection de la dépendance en utilisant le Fichier XML (ou à une attente bien sûr). Mais l'annotation à elle seule ne dit pas d'injecter la dépendance! L'injection est effectuée car la propriété est mentionnée dans le fichier XML. C'est bon à savoir, vous en aurez peut-être besoin.
En mentionnant la propriété dans un fichier XML, je veux dire une telle configuration par exemple:
<bean id="MyClass" class="com.myclasses.common.MyClass">
<property name="someProperty" value="ValueThatHasToBeInjected" />
</bean>
Alors pourquoi devrais-je l'utiliser sur l'annotation @ Autowired?
Vous devez l'utiliser lorsque la dépendance doit être injectée par les informations du fichier de configuration XML.
Pouvez-vous me donner un exemple?
Eh bien, il y a déjà un très bon exemple sur ce site Web. où cela est également expliqué.