【问题标题】:setter injection in XML not working when assigning values赋值时XML中的setter注入不起作用
【发布时间】:2020-05-21 03:39:26
【问题描述】:

我正在练习 Spring,我创建了 2 个对象(Captain、BlackWidow),我使用我的 xml 文件中的属性名称和值为其定义了值 据我所知,name 属性将调用两个类的 setName(String name) 方法,并将值 NatashaCaptain 传递给setName 方法。但是,当我调用这些方法时,它们似乎没有返回任何值。 这是我的代码:

船长类:

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;
        }
   }

Avengers 类,我从中调用 Captain 类的 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();
    }

}

那么,这是我的复仇者联盟课程:

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 文件中定义的名称:

所以,我的问题是,我是否正确分配了对象的名称?为什么正在创建对象但没有为它们分配名称?

非常感谢任何帮助。

谢谢,

【问题讨论】:

  • 如果你想用Spring练习,不要使用XML配置;它几乎已经过时了。请改用 JavaConfig Spring Boot。使用 JavaConfig,这变成了简单的@Bean public Captain steveRogers() { Captain c = new Captain(); c.setName("Steve Rogers"); return c; }

标签: java xml spring code-injection setter


【解决方案1】:

我相信你的代码是正确的,你只是没有在 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 就像您在默认情况下的打印一样构造方法

所以如果你想要名字,你必须简单地打印getter

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多