簡體   English   中英

@Configuration類的bean是否始終為null?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM