Getter方法在Spring中重新调用空值DI
问题描述:
我试图测试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
任何人都可以表明它是什么,我的思念?
感谢
答
使用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);
更新主方法我不能这样做,作为dataWriterObj只能用于在接口中定义的方法。我不想在界面中添加setter和getter方法。 –
@AnkurBahre我已经用DI实现更新了答案。请检查一次 – Sam
上述解决方案奏效。谢谢一吨 –