Metodo di ricerca primaverile Iniezione non funziona
-
28-10-2019 - |
Domanda
Sto cercando di ottenere l'iniezione del metodo di ricerca usando un semplice esempio. Ma sembra fallire nell'iniezione del fagiolo tramite il metodo.
Ho un fagiolo semplice, vale a dire; Demobeo come di seguito:
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 + '\'' +
'}';
}
}
Sto cercando di iniettare DemoBean
In un altro fagiolo, vale a dire; 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, c'è la configurazione dei miei fagioli:
<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>
Quando prova a creare un'istanza di PropertyBean
. Sono in grado di farlo. Ma quando faccio quanto segue .. ottengo l'eccezione del puntatore nullo sulla proprietà demobea (perché il fagiolo non viene iniettato !!)
PropertyBean pb = (PropertyBean) ctx.getBean("propertybean");
System.out.println(pb.toString());
Che cosa sto facendo di sbagliato? Mi sono perso qualcosa o sto trascurando qualcosa di sciocco lì!?RIFERIMENTO SPRING 3.0 (Sezione 3.4.6.1) Sembra che stia facendo lo stesso.
Soluzione
bean
La proprietà non dovrebbe essere iniettata. Come capisco gli implementazioni di primavera createBean
metodo per te, quindi quando chiami pb.createBean()
Dovrebbe restituire l'istanza di DemoBean
. Ma non assegni nulla a bean
Proprietà in ProperyBean
Quindi non c'è modo per non essere nullo.