10

utilizando Spring IoC permite establecer las propiedades de frijol expuestas a través de incubadoras:grano de primavera campos inyección

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

y la definición Bean es:

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

¿Hay alguna plugins/clases existentes para Spring Framework que permite exponer directamente los campos de beans como propiedades sin definir setters? Algo como esto con la misma definición de frijol:

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

No entendí lo que estás tratando de hacer? ¿Quieres inyectar cadena en el campo? – Bozho

+0

No exactamente. Quiero exponer el campo como una propiedad sin escribir un método setter. – Vladimir

+0

Es una buena pregunta, creo. Spring MVC puede hacer inyección directa de campo para objetos de comando MVC, por lo que es sensato considerar la inyección directa de campo para las propiedades de los beans. Sin embargo, no creo que haya ninguna manera de hacer esto en primavera. – skaffman

Respuesta

6

Puede:

  • utilizar la anotación @Value e inyectar una propiedad (usando lenguaje de expresión)
  • echar un vistazo a Project Lombok, que le permitirá omite todos los ajustadores y getters (y más)
+2

La anotación @Value reemplaza IoC con Resource Locator. Y requiere definir el valor de propiedad en el código java. Y no podría tener 2 instancias diferentes con diferentes propiedades. Es por eso que quiero solo la exposición como propiedad. – Vladimir

+1

Acerca de lombok: usar este proyecto en mi caso parece ser como una pistola en el volante. – Vladimir

+0

Lombok es el camino a seguir. Simplemente haga una anotación en sus campos privados con @Setter y listo. Sin dependencia de tiempo de ejecución, solo necesita lombok en tiempo de compilación y los archivos .class generados tendrán los métodos setter. El único problema es cuando desea anotar el método con algo como @Required. – Chochos

1

Lo que está solicitando no es posible. Spring se suscribe a la convención sobre la configuración. Entonces, espera que haya setters y getters. Mientras que la inyección de campo directa es posible con Spring; y Spring utiliza Reflection para lograr esto, Spring no proporciona la reversión de este proceso para usar Reflection para acceder a campos sin setters o getters. Incluso la implementación Spring AOP espera encontrar métodos para estructurar sus proxies.

Cuestiones relacionadas