2017-07-12 72 views
0

假設所有文件都在名爲tom的包中。類@Configuration的bean是否始終爲空?

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有非空值。 Spring中有沒有辦法做到這一點,或者它會一直爲空。請幫忙。

+2

當使用XML時,你必須告訴Spring使用註釋來處理添加''到你的xml配置(當然還有適當的命名空間)。 –

回答

1

由於類Tezt不初始化它的成員 「公共Teztt teztt」沒有理由有一個非空teztt。可以在Textsz類中初始化teztt元素,也可以在運行時環境中添加一個方法,例如init()並修改spring bean配置。例如:

public class Tezt { 
    @Autowired 
    public Teztt teztt = new Teztt(); 
} 

但這種方式永遠不會停止。

使用初始化方法的XML bean內:

public class Tezt { 
    public void init() { 
     this.teztt = new Tezt(); 
    } 
... 

<bean id="idTezt" class="tom.Tezt" init-method="init" /> 

但第二後此停止。

+0

@Autowired public Teztt teztt = new Teztt();真? – NikNik

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); 
    } 
} 
+0

context = new ClassPathXmlApplicationContext(「tom/Tezt.xml」);註冊所有的豆子。爲什麼明確。 –

+1

等一下,你是自動裝配配置類,那是錯的 – NikNik

+0

我需要使用AuthConfiguration裏面的函數。 –