2017-09-20 125 views
0

我试图测试Spring依赖注入功能,但在尝试使用Spring Bean类的getter方法检索实例变量的值时遇到问题。获取先前设置的实例变量的空值。Getter方法在Spring中重新调用空值DI

我的主类

public class Main { 
public static void main(String ... args) { 

    ApplicationContext context = new ClassPathXmlApplicationContext("BeanFactory.xml"); 
    IBackup dataWriterObj = (IBackup) context.getBean("writeBackupHDFS"); 
    backup backup = new backup(); 
    backup.setNickName("Abbey"); 
    String result = dataWriterObj.read("Ankur", "Bahre"); 
System.out.println(result); 
} 
} 

Bean类

public class backup implements IBackup { 
private String nickName; 

public String getNickName() { 
    return nickName; 
} 

public void setNickName(String nickName) { 
    this.nickName = nickName; 
} 

public String read(String firstName, String lastName) { 
    String Name = "My Name is " + firstName + " " + lastName + " and my nickName is " + getNickName(); 
    return Name; 
} 
} 

接口

public interface IBackup { 

public String read(String firstName, String lastName); 
} 

BeanFactory.xml

<bean id="writeBackupHDFS" class="test.backup"/> 

预期输出 - My Name is Ankur Bahre and my nickName is Abbey

实际输出 - My Name is Ankur Bahre and my nickName is null

任何人都可以表明它是什么,我的思念?

感谢

回答

0

使用dataWriterObj.setNickName("Abbey")而不是backup.setNickName("Abbey")

由于下面的代码与dataWriterObj对象没有关系。

backup backup = new backup(); 
    backup.setNickName("Abbey"); 

编辑:

与名称创建另一个类

public class Name { 
    private String nickName; 

    public String getNickName() { 
     return nickName; 
    } 

    public void setNickName(String nickName) { 
     this.nickName = nickName; 
    } 
} 

更新备份类以上更改

public class backup implements IBackup { 

    @Autowired 
    Name nameObj; 

    public void setNameObj(Name nameObj) { 
     this.nameObj = nameObj; 
    } 

    public String read(String firstName, String lastName) { 
     String Name = "My Name is " + firstName + " " + lastName + " and my nickName is " + nameObj.getNickName(); 
     return Name; 
    } 
} 

将它添加到CONF文件BeanFactory.xml:

<bean id="writeBackupHDFS" class="springboot.rest.backup"> 
      <property name="nameObj" ref="nameBean"/> 
      </bean> 
<bean id="nameBean" class="springboot.rest.Name"/> 

现在用下面的代码

ApplicationContext context = new ClassPathXmlApplicationContext("BeanFactory.xml"); 
     IBackup dataWriterObj = (IBackup) context.getBean("writeBackupHDFS"); 
     Name nameBean = (Name) context.getBean("nameBean"); 
    // backup backup = new backup(); 
     nameBean.setNickName("Abbey"); 
     String result = dataWriterObj.read("Ankur", "Bahre"); 
    System.out.println(result); 
+0

更新主方法我不能这样做,作为dataWriterObj只能用于在接口中定义的方法。我不想在界面中添加setter和getter方法。 –

+0

@AnkurBahre我已经用DI实现更新了答案。请检查一次 – Sam

+0

上述解决方案奏效。谢谢一吨 –