Bean没有使用AnnotationConfigApplicationContext进行自动装配

时间:2013-06-16 13:46:53

标签: spring spring-annotations

我对于Spring 2.5之后引入的Annotation Driven Spring相当新。我对基于XML的配置感到相当满意,并且我从来没有遇到过使用XMl加载Spring容器的方法将bean转换为AutoWire的问题。在XML世界里,事情真是太酷了,但后来我转向了Annotation Ville,现在我对这里的人提出了一个简单的问题:为什么我的bean不会自动装配?这里是我有的课程创建:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.myspringapp.MyBean;
import com.myspringapp.MySpringAppConfig;

public class TestConfig {

@Autowired
private static MyBean myBean;

public static void main(String[] args) {
    new AnnotationConfigApplicationContext(MySpringAppConfig.class);
    System.out.println(myBean.getString());
}

}

以上是调用AnnotationConfigApplicationContext类的标准java类。我的印象是,一旦加载了“MySpringAppConfig”类,我将引用myBean aurowired属性,因此可以在其上调用getString方法。但是,我总是得到null,因此NullPointerException。

package com.myspringapp;

import org.springframework.stereotype.Component;

@Component
public class MyBean {

    public String getString() {
        return "Hello World";
    }
}

上面是组件MyBean,它很容易理解,下面是Configuration类:

package com.myspringapp;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MySpringAppConfig {

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

注意:如果我使用(MyBean)ctx.getBean(“myBean”),我可以获得对bean的引用;但我不想使用getBean方法。

1 个答案:

答案 0 :(得分:1)

我知道的唯一方法是自动装配静态字段是使用setter。但是这也不适用于你的情况,因为Spring需要处理对象,但是TestConfig类没有在你的代码中处理。如果要将依赖项注入TestConfig,可以将其定义为bean:

public class MySpringAppConfig {
  @Bean
  public TestConfig testConfig() {
    return new TestConfig();
  }
  .....

然后通过:

获取
TestConfig tc = (TestConfig) ctx.getBean("testConfig");

然后Spring可以使用setter方法注入myBean