L'injection de la méthode Spring Lookup ne fonctionne pas
-
28-10-2019 - |
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.
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.