Question

J'essaie de réaliser une injection de méthode de recherche en utilisant un exemple simple.Mais, semble échouer à faire injecter le bean via la méthode.

J'ai un haricot simple à savoir;DemoBean comme ci-dessous:

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 + '\'' +
                '}';
    }
}

J'essaye d'injecter DemoBean dans un autre bean à savoir;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 +
                '}';
    }
}

Non, voici ma configuration de beans:

<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>

Lorsque vous essayez de créer une instance de PropertyBean.Je suis capable de le faire.Mais quand je fais ce qui suit .. J'obtiens une exception de pointeur nul sur la propriété DemoBean (Parce que le bean n'est pas injecté !!)

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

Qu'est-ce que je fais de mal?Ai-je manqué quelque chose ou est-ce que je néglige quelque chose de stupide là-bas! Référence de Spring 3.0 (section 3.4.6.1) semble faire la même chose.

Était-ce utile?

La solution

La propriété bean ne doit pas être injectée.Si je comprends bien, Spring implémente la méthode createBean pour vous, donc lorsque vous appelez pb.createBean(), il devrait renvoyer une instance de DemoBean.Mais vous n'attribuez rien à la propriété bean dans ProperyBean donc il n'y a aucun moyen pour qu'elle ne soit pas nulle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top