我有一个从上下文创建的bean,之后会创建一个自动装配的成员:
@Service
public class FileDownloadService extends WFWFileDownloadService {
@Autowired
ConfigurationManager configurationManager;
当我在代码手动构造函数中使用时调用:
FileDownloadService fileDownloadService = new FileDownloadService();
我看到configurationManager为null,所以我必须进行手动连接:
public FileDownloadService() {
configurationManager = new ConfigurationManagerImpl();
}
使用手动创建自动装配是做错了什么?
答案 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