0

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

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

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

FileDownloadService fileDownloadService = new FileDownloadService(); 

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

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

使自动装配与手动创建一起工作我做错了什么?

4

3 回答 3

2

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

询问 bean 的 Spring 上下文。

于 2013-04-14T07:10:09.113 回答
1

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

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

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

@Controller or @Component
public class OtherClass {

    @Autowired FileDownloadService fileService;

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

}

为了这个类能够自动装配其他bean,这个类本身应该用@Controlleror注释@Component

于 2013-04-14T07:16:47.237 回答
0

答案很简单:如果您手动创建对象,则无需布线。Spring 应该如何知道您需要布线?您可以使用应用程序上下文(Bean 工厂)的 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

于 2013-04-14T23:23:26.827 回答