setter XML 中的注入在分配值时不起作用

setter injection in XML not working when assigning values

我正在练习 Spring 并创建了 2 个对象(Captain、BlackWidow),我在 xml 文件中使用 属性 名称和值为其定义了值 据我所知,name 属性将在 classes 上调用 setName(String name) 方法,并将传递值 NatashaCaptain 到 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