为什么春季靴找不到我的豆子?

时间:2018-08-23 06:06:43

标签: java spring spring-boot annotations spring-bean

我有以下错误:

Parameter 0 of constructor in com.yyy.zzz.xxx.service.ControlService required a bean of type 'com.yyy.zzz.xxx.service.composeXML.ComposeCounterService' that could not be found.

通常这是因为我忘记注释服务或 界面,但是我整个上午一直在上课,找不到 任何缺少的注释..

此时的界面只是:

@Component
public interface ComposeCounterService {
CLASSX init(List<YYY> owners) throws JAXBException;
}

和隐含服务如下,并且在这种情况下包含init()方法。

@Service
public class ComposeCounterImpl implements ComposeCounterService {
/*** loots of code
}

和ApplicationConfig文件位于服务包上方一层。在此信息中被标记为“ XXX”。

它包含以下软件包扫描:

@SpringBootApplication
scanBasePackages = {"com.yyy.zzz.xxx")

我还尝试了一系列扫描,例如:

scanBasePackages = {"com.yyy.zzz.xxx", "com.yyy.zzz.xxx.service.composeXML"})

并且在.service之后没有composeXML 这些都不起作用。

我非常确定我在这里缺少任何东西,请发送帮助。

编辑: 注射方式:

private final ComposeCounterService composeCounterService;

public ControlService(ComposeCounterService composeCounterService) {
    this.composeCounterService = composeCounterService;
}

4 个答案:

答案 0 :(得分:2)

错误的导入是:

import org.jvnet.hk2.annotations.Service;

正确的是:

import org.springframework.stereotype.Service;

如果仅让您的IDE建议导入,然后按Enter键而不阅读它添加的内容,则为结果。

答案 1 :(得分:1)

由于com.yyy.zzz.xxx.service位于此包中,因此需要在scanBasePackages属性中添加包ControlService

尝试一下,让我知道是否还有其他问题

-编辑

@Component中删除interface ComposeCounterService(因为接口永远不会初始化)

现在将bean名称命名为Service类:

@Service("composeCounterImpl")
public class ComposeCounterImpl implements ComposeCounterService {
/*** loots of code
}

现在将您的构造函数定义为:

@Autowired
public ControlService(@Qualifier("composeCounterImpl") ComposeCounterService composeCounterService) {
    this.composeCounterService = composeCounterService;
}

P.S:确保组件扫描中的所有功能都可用

答案 2 :(得分:1)

您是否在ComposeCounterService字段上使用了@Autowired

如果是这样;也许可以尝试在@ComponentScan上方使用@SpringBootApplication

此处的文档:https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html

希望这会有所帮助。

欢呼声

答案 3 :(得分:1)

我是个白痴……

人们,请务必检查您的进口商品... 我什至忽略了这一点,只粘贴了无法解决问题的代码...

我为@service批注导入了错误。这就是问题的根本原因。 只花了几个小时就非常生气地调试了。