假设所有文件都在名为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。请帮忙。

最佳答案

由于类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" />


但这会在第二秒后停止。

10-04 18:06