假设所有文件都在名为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中有没有办法做这件事,或者它总是为空。请帮忙。
答案 0 :(得分:1)
编辑:在你的xml中你需要插入:
<context:annotation-config/>
你需要声明你的bean:
@Configuration
public class Config{
@Bean
public Teztt getTeztt(){
return new Teztt();
}
@Bean
public A getA() {
return new A(56);
}
}
答案 1 :(得分:1)
由于Tezt课程没有初始化其成员&#34;公共Teztt teztt&#34;,因此没有理由不使用无效的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" />
但这会在第二次停止后停止。