假设所有文件都在名为tom的程序包中。
A.java
@AllArgsConstructor
public class A {
public int x;
}
Teztt.java
@Configuration
public class Teztt {
@Bean
public A getA() {
return new A(56);
}
public void print() {
System.out.println("Hello world");
}
}
Tezt.java
public class Tezt {
@Autowired
public Teztt teztt;
}
Tezt.xml
<bean class="tom.Teztt" />
<bean id="idTezt" class="tom.Tezt" />
Runner.java
public class Runner {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("tom/Tezt.xml");
Tezt t = (Tezt) context.getBean("idTezt");
if(t.teztt == null) {
System.out.println("NPE");
}
}
}
上面的输出是NPE。我的问题是我想让Teztt的Object具有非null值。 Spring中有什么方法可以做到这一点,或者它总是为null。请帮忙。
最佳答案
由于类Tezt不会初始化其成员“ public Teztt teztt”,因此没有理由使用非null的teztt。在Textsz类中初始化teztt元素,或添加一个方法(如init())并在运行时环境中修改spring bean配置。例如:
public class Tezt {
@Autowired
public Teztt teztt = new Teztt();
}
但是这种方式永远不会停止。
在xml bean中使用init-method:
public class Tezt {
public void init() {
this.teztt = new Tezt();
}
...
和
<bean id="idTezt" class="tom.Tezt" init-method="init" />
但这会在第二秒后停止。