@Autowired不会在构造函数中创建成员

时间:2013-04-14 07:06:09

标签: java spring

我有一个从上下文创建的bean,之后会创建一个自动装配的成员:

@Service
public class FileDownloadService extends WFWFileDownloadService {
    @Autowired
    ConfigurationManager configurationManager;

当我在代码手动构造函数中使用时调用:

FileDownloadService fileDownloadService = new FileDownloadService(); 

我看到configurationManager为null,所以我必须进行手动连接:

    public FileDownloadService() {
        configurationManager = new ConfigurationManagerImpl();
    }

使用手动创建自动装配是做错了什么?

3 个答案:

答案 0 :(得分:2)

当你直接调用构造函数时,你只是创建一个对象而不是一个bean。 @Autowired注释的支持是bean的一个特性。

向Spring上下文询问bean。

答案 1 :(得分:1)

如果您尝试使用new运算符获取bean,则会将该类中的所有autowired bean都null

您的服务类使用@Service注释,因此要使用它,您还应该自动装配此服务类。

访问其他类中的服务bean的示例代码是:

@Controller or @Component
public class OtherClass {

    @Autowired FileDownloadService fileService;

    public void download() {
        fileService.downloadFile();
    }

}

为了使此类能够自动装配其他bean,此类本身应使用@Controller@Component进行注释。

答案 2 :(得分:0)

答案很简单: 如果手动创建对象,则不涉及任何布线。 Spring怎么知道你需要接线?您可以使用应用程序上下文(Bean Factory)的getBean()方法,而不是使用new。 http://static.springsource.org/spring/docs/current/javadoc-api/index.html?org/springframework/beans/factory/BeanFactory.html http://static.springsource.org/spring/docs/current/javadoc-api/index.html?org/springframework/beans/factory/BeanFactory.html