setter XML 中的注入在分配值时不起作用
setter injection in XML not working when assigning values
我正在练习 Spring 并创建了 2 个对象(Captain、BlackWidow),我在 xml 文件中使用 属性 名称和值为其定义了值
据我所知,name 属性将在 classes 上调用 setName(String name) 方法,并将传递值 Natasha和 Captain 到 setName 方法。但是,当我调用这些方法时,它们似乎 return 没有任何价值。
这是我的代码:
队长class:
package com.tutorialspoit;
public class Captain {
private String name;
public Captain() {
System.out.println("Captain constructor");
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name=name;
}
}
复仇者联盟 class,我从中调用队长 class 的 getName() 方法:
package com.tutorialspoit;
public class Avengers {
private Captain steve;
private BlackWidow natasha;
public Avengers() {
System.out.println("Avengers constructor");
}
public void setCaptain(Captain cap){
this.steve=cap;
}
public String getCaptain() {
return steve.getName();
}
public void setBlackWidow(BlackWidow bw){
this.natasha=bw;
}
public String getBlackWidow() {
return natasha.getName();
}
}
那么,这是我的复仇者联盟class:
import org.springframework.context.support.*;
public class MainAvengers {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
Avengers avg = context.getBean("myAssembly", Avengers.class);
avg.getCaptain();
avg.getBlackWidow();
context.close();
}
}
最后是我的 applicationContext.xml 文件:
<bean id="myAssembly" class="com.tutorialspoit.Avengers">
<property name="captain" ref="steve_rogers"/>
<property name="blackWidow" ref="natasha_romanov"/>
</bean>
<bean id="natasha_romanov" class="com.tutorialspoit.BlackWidow">
<property name="name" value="Natasha"/>
</bean>
<bean id="steve_rogers" class="com.tutorialspoit.Captain">
<property name="name" value="Captain"/>
</bean>
当我编译它时,它编译得很好,但它没有显示我在 xml 文件中定义的名称:
所以,我的问题是,我是否正确地为我的对象分配了名称?为什么创建了对象但没有为它们分配名称?
非常感谢任何帮助。
谢谢,
我相信你的代码是正确的,你只是没有在 main 中做出你想要的正确的事情:
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
Avengers avg = context.getBean("myAssembly", Avengers.class); // 1
avg.getCaptain(); //2
avg.getBlackWidow(); //3
context.close();
}
在 1,2,3 中你只是调用对象,它只调用默认构造函数,这就是为什么你只得到输出 Class contructor
就像您在默认构造函数方法中打印一样
所以如果你想要名字,你必须简单地 打印 getters
我正在练习 Spring 并创建了 2 个对象(Captain、BlackWidow),我在 xml 文件中使用 属性 名称和值为其定义了值 据我所知,name 属性将在 classes 上调用 setName(String name) 方法,并将传递值 Natasha和 Captain 到 setName 方法。但是,当我调用这些方法时,它们似乎 return 没有任何价值。 这是我的代码:
队长class:
package com.tutorialspoit;
public class Captain {
private String name;
public Captain() {
System.out.println("Captain constructor");
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name=name;
}
}
复仇者联盟 class,我从中调用队长 class 的 getName() 方法:
package com.tutorialspoit;
public class Avengers {
private Captain steve;
private BlackWidow natasha;
public Avengers() {
System.out.println("Avengers constructor");
}
public void setCaptain(Captain cap){
this.steve=cap;
}
public String getCaptain() {
return steve.getName();
}
public void setBlackWidow(BlackWidow bw){
this.natasha=bw;
}
public String getBlackWidow() {
return natasha.getName();
}
}
那么,这是我的复仇者联盟class:
import org.springframework.context.support.*;
public class MainAvengers {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
Avengers avg = context.getBean("myAssembly", Avengers.class);
avg.getCaptain();
avg.getBlackWidow();
context.close();
}
}
最后是我的 applicationContext.xml 文件:
<bean id="myAssembly" class="com.tutorialspoit.Avengers">
<property name="captain" ref="steve_rogers"/>
<property name="blackWidow" ref="natasha_romanov"/>
</bean>
<bean id="natasha_romanov" class="com.tutorialspoit.BlackWidow">
<property name="name" value="Natasha"/>
</bean>
<bean id="steve_rogers" class="com.tutorialspoit.Captain">
<property name="name" value="Captain"/>
</bean>
当我编译它时,它编译得很好,但它没有显示我在 xml 文件中定义的名称:
所以,我的问题是,我是否正确地为我的对象分配了名称?为什么创建了对象但没有为它们分配名称?
非常感谢任何帮助。
谢谢,
我相信你的代码是正确的,你只是没有在 main 中做出你想要的正确的事情:
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
Avengers avg = context.getBean("myAssembly", Avengers.class); // 1
avg.getCaptain(); //2
avg.getBlackWidow(); //3
context.close();
}
在 1,2,3 中你只是调用对象,它只调用默认构造函数,这就是为什么你只得到输出 Class contructor
就像您在默认构造函数方法中打印一样
所以如果你想要名字,你必须简单地 打印 getters