我对 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 方法。