Comment activer @Required?
Question
Comment activer l'annotation @Required en Java (Spring 3.1)?Pas dans un xml, mais via Java.Aussi sous quelle annotation je mets cette activation?Sous @Feature (dans @FutureConfiguration ou @Bean (dans @Configuration)?
< gagnantEdit:
@Feature
public MvcAnnotationDriven annotationDriven(ConversionService conversionService) {
return new MvcAnnotationDriven().conversionService(conversionService)
.argumentResolvers(new CustomArgumentResolver());
}
Est-ce que cela active toutes les annotations?
La solution
La réponse de @ anubhava fonctionne, mais il a fait référence au manuel Spring 2.0, qui date de 5 ans.
Dans la configuration XML, Spring 3.x a une approche plus élégante: <context:annotation-config/>
.Cela a également activé tout un tas d'autres fonctionnalités que vous voudrez probablement, alors que RequiredAnnotationBeanPostProcessor
n'en permet que quelques-unes.
Voir Manuel Spring 3.x .
Si vous utilisez une configuration de style @Bean
, alors les annotations comme @Required
devraient déjà être activées, puisque c'est ainsi que fonctionne @Bean
.Cependant, il est possible qu'il s'agisse d'un bogue - Spring 3.1 est encore au début de la version bêta, et de gros morceaux sont susceptibles d'être cassés.
À moins que vous ne sachiez vraiment ce que vous faites, je vous recommande vivement de vous en tenir à la version 3.0.x.
Autres conseils
Extrait du manuel Spring :
Il y a un dernier petit (petit, petit) morceau de configuration Spring qui est nécessaire pour `` allumer '' ce comportement. Annotant simplement le Les propriétés 'setter' de vos classes sont pas assez pour obtenir ce comportement. Toi besoin d'activer un composant qui est conscient de l'annotation @Required et qui peut le traiter de manière appropriée.
Ce composant est le RequisAnnotationBeanPostProcessor classe. C'est un spécial Implémentation de BeanPostProcessor qui est @ Required-aware et en fait fournit le 'sauter si cela est nécessaire la propriété n'a pas été définie «logique. Il est très facile à configurer; laissez tomber la définition de bean suivante en votre configuration Spring XML.
<bean class=
"org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
Veuillez vérifier: http://static.springsource.org /spring/docs/2.0.x/reference/metadata.html
Utilisez AnnotationConfigApplicationContext
si vous ne souhaitez pas utiliser XML:
Contexte d'application autonome, accepter les classes annotées en entrée - en particulier
@Configuration
-annotated classes, mais aussi@Components
simple et classes conformes JSR-330 utilisant annotations javax.inject.Permet enregistrement des classes une par une (register(java.lang.Class...)
) ainsi comme pour l'analyse des chemins de classe (scan(java.lang.String...)
).En cas de configuration multiple classes, méthodes Bean définies ultérieurement les classes remplaceront celles définies dans classes antérieures.Cela peut être mis à profit pour remplacer délibérément certains haricots définitions via une configuration supplémentaire classe.
Exemple de code:
ConfigurableApplicationContext applicationContext =
new AnnotationConfigApplicationContext(
"com.mycompany.package1",
"com.mycompany.package2",
"com.mycompany.package3"
// etc.
);
applicationContext.refresh();