【发布时间】:2017-09-18 20:16:30
【问题描述】:
大家好。在使用 Springboot 时,我有一个关于将服务自动装配到我的类中的问题。我在互联网上以及 Springboot 规范中看到的所有示例都做了类似的事情(摘自 Springboot 版本 1.5.7 规范):
package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
@Autowired
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
这是一个通过其构造函数注入属性的类,通过 @Autowiring 构造函数。另一种形式是像这样@Autowire 属性:
@Autowired
private final RiskAssessor riskAssessor
但是,在我工作的地方,为了使这两种方法起作用,我被告知我需要使用这种方法:
applicationContext.getAutowireCapableBeanFactory().autowireBean(Object.class)
他们告诉我,我需要这个才能使 @Autowired 注释起作用。
现在我的问题是:为什么没有简单的注释可以让@Autowire 正常工作? (类似于@AutowiredClass)。上面的方法太冗长而且很难记住,所以肯定有更好的方法让@Autowired 在类上工作以便注入服务,就像我们在 Grails 中所做的那样,我们只是说 def someService 并且它会自动注入.
【问题讨论】:
-
你的问题有点不清楚......你的意思是
applicationContext.getAutowireCapableBeanFactory().autowireBean(DatabaseAccountService.class)吗?如果“是”,那么不,你不需要那个。只需正确配置“组件扫描”即可。 -
我认为你不需要对应用程序上下文做任何特殊的事情。确保在 Spring 配置中的某处创建了 RiskAssessor bean。
-
在Spring boot中,不需要,只要你在Main类包或其子包中即可
-
@Tom 是的,是您问题的答案
-
@Greg 那你就不需要那行了。请检查现有答案,如果它们不能帮助您解决问题,请相应地更新您的问题并添加
RiskAssessor的 sn-p 以显示其注释方式。
标签: java spring spring-boot autowired