2017-07-12 46 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里面的函数。 –