Spring 3.0.2では、Bean Aのプロパティを別のBean Bに注入しようとしていますが、Spring ELが動作していません。Spring 3.0では、あるBeanのプロパティを別のBeanに挿入するにはどうすればよいですか?
Bean AはJavaで手動で作成されています。 Bean BはXMLを使用して作成されます。この場合ビーンAにおいて
はポテトとビーンBベビー(両方パッケージspringinitで)です。
ビーンA(ポテト):
public class Potato {
String potatoType;
public String getPotatoType() { return potatoType; }
public void setPotatoType(String potatoType) { this.potatoType = potatoType; }
@Override
public String toString() {
return "Potato{" + "potatoType=" + potatoType + '}';
}
}
ビーンB(ベビー):私のメインクラスで
public class Baby {
private String name;
private Potato potatoThing;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Potato getPotatoThing() { return potatoThing; }
public void setPotatoThing(Potato p) { this.potatoThing = p; }
@Override
public String toString() {
return "Baby{" + "name=" + name +
", potatoThing=" + potatoThing + '}';
}
}
、私はポテトを作成し、作成しようとすると、XMLでそれを使用しますベビー
package springinit;
import static org.springframework.beans.factory.support.BeanDefinitionBuilder.genericBeanDefinition;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.core.io.ClassPathResource;
public class Main {
public static void main(String[] args) {
GenericApplicationContext ctx= new GenericApplicationContext();
// define java-based spring bean
ctx.registerBeanDefinition("myPotato",
genericBeanDefinition(Potato.class)
.addPropertyValue("potatoType", "spudzz")
.getBeanDefinition());
// read in XML-bean
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(
new ClassPathResource("/resources/spring_init.xml"));
// print out results
System.out.format(
"Baby: %s%n%n" +
"Potato: %s%n",
ctx.getBean(Baby.class),
ctx.getBean(Potato.class)
);
}
}
は、ここに私のspring_init.xmlです:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="myBaby" class="springinit.Baby" depends-on="myPotato">
<property name="name" value="#{myPotato.potatoType}" />
<property name="potatoThing">
<ref bean="myPotato" />
</property>
</bean>
</beans>
私がメイン実行すると、私はこの出力を得る:
Baby: Baby{name=#{myPotato.potatoType}, potatoThing=Potato{potatoType=spudzz}}
Potato: Potato{potatoType=spudzz}
私は赤ちゃんの名前はmyPotatoの財産である「spudzz」、になりたいです。なぜ春はこの値を赤ちゃんに注入しないのですか?
ありがとうございます。十分にはっきりしていればいいと思う。
これはうまくいきました。お手伝いありがとう! 実際には、JMXサーバーのポート番号をコマンドラインパラメータに基づいて注入したいので、JMXファイルをロードする前にctx.refresh()を呼び出します。 –
@black:更新されました。 – axtavt