Cómo Autowire un grano dentro de una clase que no es un grano configurado?
Pregunta
Perdóname si no consigo la terminología correcta.
Mi situación es la siguiente:
Tengo una clase, vamos a llamarlo theClass. Dentro de esta clase es un objeto theData.
Tengo XML para configurar el frijol theData, así:
<bean id="theData" class="com.abc.TheData">
<property name="field" value="value1" />
</bean>
y un regulador dentro theClass este modo:
public void setTheData(TheData theData)
{
this.theData = theData;
}
Mi problema es que si no lo hago también crean el grano theClass en el XML (y por lo tanto no se puede dejar que se autowired), no va a saber a Autowire el campo theData (¿verdad?). Y debido a ciertas restricciones, no puedo configurar theClass en el XML (y por lo tanto más tarde tenerlo autowired). Por lo tanto, mi pregunta es, ¿cómo puedo hacer este trabajo? Soy un poco novato así que si me falta algo, no dude en señalarlo.
Solución
Si usted puede controlar la primavera contexto, echarlo a AutowireCapableBeanFactory
, y pasar la instancia de TheClass
al método autowireBean(Object)
. Primavera tratará entonces de aplicar sus normas Autowiring a ese objeto.
Se necesitaría añadir @Autowired
al método setTheData
, sin embargo.
Otros consejos
Se podría utilizar @Resource o @Component.
Yo sólo veía ahora esta pregunta y pensó que podría añadir un método más de hacer lo que quiere (aunque el AutowireCapableBeanFactory sería mi elección). Puede aprovechar la anotación @Configurable de la manera que se describe en este blog
Usted debe ser capaz de usar sólo la anotación @Autowired en su variable de instancia que el colocador se pone, sin tener que declarar un frijol en su theClass XML. Es decir:
public class TheClass {
@Autowired
private TheData theData;
}