Cómo instancia Spring esta clase y su dependencia

No estoy seguro de que esto esté relacionado con un resorte o no:

Tengo una clase de frijol como esta

class BeanClass {
    private ServiceA serviceA;
    private ServiceB serviceB;

    public BeanClass() {}

    public void setServiceA(ServiceA serviceA) {
        this.serviceA = serviceA;
    }

    public void setServiceB(ServiceB serviceB) {
        this.serviceB = serviceB;
    }

    public void callService() {
        serviceA.a();
        serviceB.b();
    }
}

y su configuración:

<bean id="beanClass" class="BeanClass">
    <property name="serviceA" ref="serviceA"/>
    <property name="serviceB" ref="serviceB"/>
</bean>

pero creo una instancia del bean con una nueva palabra clave en una clase de controlador:

class ControllerClass {
    public void someMethod() {
        BeanClass beanClass = new BeanClass();
        beanClass.callService();
    }
}

mi problema es cómo ServiceA y ServiceB se instanciaron correctamente. ya que uso new para obtener un objeto de clase, y nunca configuro su miembro de campo.

preguntado el 03 de mayo de 12 a las 20:05

1 Respuestas

No quieres hacer:

BeanClass beanClass = new BeanClass(); 

Esto, en pocas palabras, es el punto central del contenedor IOC de Spring. Debe dejar que el contenedor IOC le dé una referencia a su BeanClass

@Autowired
BeanClass myBeanClass;

*Esto no está completamente completo, ya que necesitará un poco de cableado adicional para su controlador.

contestado el 03 de mayo de 12 a las 20:05

¡Gracias! Sé que esto no es una buena práctica. Solo quiero asegurarme de cómo Spring crea una instancia de su miembro de campo. por ejemplo, ServicioA, ServicioB. - Liqun sol

Creará instancias para las 2 propiedades que definió y luego los llamará setters. - azotea

¡gracias! Quiere decir que Spring usará la definición de bean para instanciar BeanClass cuando vea una nueva BeanClass(), incluso yo la llamo desde un método normal y la asigno a una variable local. - Liqun sol

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.