0

我对 Spring 2.5 之后引入的 Annotation Driven Spring 相当陌生。我对基于 XML 的配置相当满意,而且我从来没有遇到过使用加载 Spring 容器的 XMl 方法将 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 方法。但是,我总是得到空值,因此是 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 方法。

4

1 回答 1

1

我知道的唯一方法是自动连接静态字段是使用设置器。但这在您的情况下也不起作用,因为 Spring 需要处理该对象,但TestConfig您的代码中没有处理该类。如果你想将依赖注入到TestConfig中,你可以将它定义为一个 bean:

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

然后通过以下方式获取:

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

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

于 2013-06-16T15:20:43.690 回答