类@Configuration的bean总是为null吗?

时间:2017-07-12 12:54:43

标签: java spring

假设所有文件都在名为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中有没有办法做这件事,或者它总是为空。请帮忙。

2 个答案:

答案 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" />

但这会在第二次停止后停止。