Pregunta

Estoy tratando de lograr la inyección del método de búsqueda utilizando un ejemplo simple. Pero, parece fallar para inyectar el bean a través del método.

Tengo un frijol simple, a saber; DeMobean como se muestra:

public class DemoBean {

    private String message;

    public DemoBean() {

    }

    public DemoBean(String message) {
        this.message = message;
    }

    // Getter and Setter methods

    @Override
    public String toString() {
        return "DemoBean{" +
                "message='" + message + '\'' +
                '}';
    }
}

Estoy tratando de inyectar DemoBean en otro frijol, a saber; PropertyBean:

public abstract class PropertyBean {

    private DemoBean bean;
    private String message;
    // other members...

    public PropertyBean(String message) {
        this.message = message;
    }

    // Getter and Setter methods...

    // Method for lookup injection
    protected abstract DemoBean createBean();

    @Override
    public String toString() {
        return "PropertyBean{" +
                "bean=" + bean.toString() +
                ", message='" + message + '\'' +
                ", number=" + number +
                '}';
    }
}

Noe, está mi configuración de frijoles:

<bean id="demobean" class="aro.discoverspring.beans.DemoBean" scope="prototype">
<property name="message" value="The Default Message!!!" />
</bean>

<bean id="propertybean" class="aro.discoverspring.beans.PropertyBean">
<constructor-arg name="message" value="A message in PropertyBean"/>
<lookup-method name="createBean" bean="demobean" />
</bean>

Cuando intente crear una instancia de PropertyBean. Puedo hacerlo. Pero cuando hago lo siguiente ... obtengo una excepción de puntero nulo en la propiedad de Demobean (¡porque el bean no está siendo inyectado!)

PropertyBean pb = (PropertyBean) ctx.getBean("propertybean");       
System.out.println(pb.toString());

¿Qué estoy haciendo mal? ¿Me perdí algo o estoy pasando por alto algo tonto allí?Referencia de primavera 3.0 (Sección 3.4.6.1) parece estar haciendo lo mismo.

¿Fue útil?

Solución

bean La propiedad no debe ser inyectada. Según entiendo los implementos de primavera createBean método para ti, así que cuando llamas pb.createBean() Debería devolver instancia de DemoBean. Pero no asignas nada a bean propiedad de ProperyBean Entonces no hay forma de que no sea nulo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top