[英]Spring Bean is still null after being initialized in the configuration class
[英]Is the bean for the class @Configuration always null?
假設所有文件都在名為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。 請幫忙。
編輯:在您的xml中,您需要插入:
<context:annotation-config/>
並且您需要聲明您的bean:
@Configuration
public class Config{
@Bean
public Teztt getTeztt(){
return new Teztt();
}
@Bean
public A getA() {
return new A(56);
}
}
由於類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" />
但這會在第二秒后停止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.