10

avec Spring IoC permet de définir les propriétés de haricots exposés par setters:bean Spring champs injection

public class Bean { 
    private String value; 
    public void setValue(String value) { 
     this.value = value; 
    } 
} 

Et la définition de haricot est:

<bean class="Bean"> 
    <property name="value" value="Hello!"> 
</bean> 

Y at-il des plugins existants/classes pour Spring Framework qui permet d'exposer directement les champs de bean en tant que propriétés sans définir les setters? Quelque chose comme ça avec la même définition de haricot:

public class Bean { 
    @Property 
    private String value; 
} 
+0

Je n'ai pas compris ce que vous essayez de faire? Vous voulez injecter de la ficelle dans le champ? – Bozho

+0

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

+0

C'est une bonne question, je pense. Spring MVC peut effectuer une injection directe sur le terrain pour les objets de commande MVC. Il est donc judicieux d'envisager une injection directe sur le terrain pour les propriétés du bean. Cependant, je ne crois pas qu'il y ait moyen de le faire au printemps. – skaffman

Répondre

6

Vous pouvez:

  • utiliser l'annotation @Value et injecter une propriété (en utilisant le langage d'expression)
  • un coup d'oeil à Project Lombok, qui laissera vous ignorez tous les setters et getters (et plus)
+2

L'annotation @Value remplace IoC avec Resource Locator. Et cela nécessite de définir la valeur de la propriété dans le code java. Et je ne pouvais pas avoir 2 instances différentes avec des propriétés différentes. C'est pourquoi je ne veux qu'une exposition en tant que propriété. – Vladimir

+1

A propos de lombok - l'utilisation de ce projet dans mon cas semble être comme une arme à feu sur le volant. – Vladimir

+0

Lombok est le chemin à parcourir. Annotez simplement vos champs privés avec @Setter et c'est tout. Aucune dépendance à l'exécution, vous avez juste besoin de lombok au moment de la compilation et les fichiers .class générés auront les méthodes setter. Le seul problème est quand vous voulez annoter la méthode avec quelque chose comme @Required. – Chochos

1

Ce que vous demandez n'est pas possible. Spring s'abonne à la convention sur la configuration. Donc, il s'attend à ce qu'il y ait des setters et des getters. Alors que l'injection directe sur le terrain est possible avec le printemps; et Spring utilise Reflection pour y parvenir, Spring ne permet pas d'inverser ce processus pour utiliser Reflection pour accéder aux champs sans setters ou getters. Même l'implémentation Spring AOP s'attend à trouver des méthodes pour structurer ses proxies.

Questions connexes