10
votes

Injection de champs de haricots de printemps

Utilisation du ressort IOC permet de définir les propriétés de haricans exposées via des setters: xxx

et la définition des haricots est la suivante: xxx

y a-t-il Plugins / classes existants pour la framework à ressort permettant d'exposer directement des champs de haricots comme des propriétés sans définir des setters? Quelque chose comme ça avec la même définition de haricot: xxx


5 commentaires

Je n'ai pas compris ce que vous essayez de faire? Vous voulez injecter une chaîne dans le champ?


Pas exactement. Je veux exposer le champ en tant que propriété sans écrire une méthode de setter.


C'est une bonne question, je pense. Le printemps MVC peut faire une injection directe sur le terrain pour des objets de commande MVC, il est donc judicieux d'envisager une injection directe sur le terrain pour les propriétés de haricot. Cependant, je ne crois pas qu'il y ait un moyen de le faire au printemps.


Setter est nécessaire, pourquoi avez-vous besoin de faire cela?


Je veux juste remplacer un groupe de setters publics (qui sont vraiment des méthodes indésirables) avec une annotation ordinaire partout où elle est utile.


3 Réponses :


6
votes

vous pouvez:

  • Utilisez l'annotation @Value et injecter une propriété (en utilisant la langue d'expression)
  • Jetez un coup d'œil à Project Lombok , qui vous permettra de sauter toutes les configurateurs et getters (et plus)

3 commentaires

@Value Annotation remplace IOC avec localisateur de ressources. Et il faut définir la valeur de la propriété dans le code Java. Et je ne pouvais pas avoir 2 cas différents avec des propriétés différentes. C'est pourquoi je ne veux que l'exposition en tant que propriété.


À propos de Lombok - L'utilisation de ce projet dans mon cas semble être comme une arme à feu sur la roue.


Lombok est la voie à suivre. Annotez simplement vos champs privés avec @setter et c'est tout. Aucune dépendance d'exécution, vous avez juste besoin de Lombok à l'heure de la compilation et les fichiers .class générés auront les méthodes de réglage. Le seul problème est que lorsque vous souhaitez annoter la méthode avec quelque chose comme @requiked.



5
votes

Spring prend en charge l'injection de champ basée sur l'annotation hors de la boîte pour le JSR-250 @Resource Annotation. Spring est propre @autowired et JSR 330 'S @Inject fonctionne aussi .

Vous avez juste besoin de Ajoutez cette ligne à votre contexte.xml : xxx

Référence:


1 commentaires

Ceux-ci ne fonctionnent pas pour les valeurs de chaîne, ils ne fonctionnent que pour injecter des haricots.



1
votes

Ce que vous demandez n'est pas possible. Spring s'abonne à la convention sur la configuration. Il s'attend donc à ce qu'il y ait des configurateurs et des getters. Tandis que l'injection directe sur le terrain est possible avec le printemps; Et le printemps utilise la réflexion pour y parvenir, le ressort ne prévoit pas d'inverser ce processus pour utiliser la réflexion pour accéder aux champs sans setters ou getters. Même la mise en œuvre de Spring AOP s'attend à trouver des méthodes pour structurer ses proxies.


0 commentaires