繁体   English   中英

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

[英]@Autowired does not create members in constructor

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

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

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

FileDownloadService fileDownloadService = new FileDownloadService(); 

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

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

使自动装配与手动创建配合使用时我做错了什么?

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

向Spring上下文询问该bean。

如果尝试使用new运算符获取Bean,则该类中所有autowired Bean都将为null

您的服务类带有@Service注释,因此要使用它,您还应该自动连接该服务类。

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

@Controller or @Component
public class OtherClass {

    @Autowired FileDownloadService fileService;

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

}

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

答案很简单:如果手动创建对象,则无需布线。 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM