添加@Service等注解后仍提示需定义GymService类型Bean问题求助
修复方案
1. 核心问题修复
你将@Service注解标注在了GymService接口上,Spring不会为接口创建实例,该注解必须标注在接口的具体实现类上才会生效,且你目前缺失GymService的实现类,这是找不到对应Bean的直接原因。
按以下步骤操作即可解决:
- 移除
GymService接口上的@Service注解 - 新增
GymService接口的实现类,参考代码如下:
package app.gym.v1.Service.Impl; import app.gym.v1.Model.Domain.Gym; import app.gym.v1.Repo.GymRepo; import app.gym.v1.Service.GymService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class GymServiceImpl implements GymService { private final GymRepo gymRepo; @Autowired public GymServiceImpl(GymRepo gymRepo) { this.gymRepo = gymRepo; } @Override public List<Gym> getGyms() { // JpaRepository自带findAll方法查询所有数据 return gymRepo.findAll(); } @Override public Gym findGymByGymName(String gymName) { return gymRepo.findByGymName(gymName); } }
2. 额外检查项
如果完成上述操作后仍存在报错,核对以下配置:
- 确认Spring Boot启动类放在
app.gym.v1根包下,默认包扫描规则只会扫描启动类所在包及其子包的注解。如果启动类存放位置不符合要求,可在启动类上添加@ComponentScan(basePackages = "app.gym.v1")手动指定扫描范围 - 确认启动类的
@SpringBootApplication注解没有配置错误的exclude参数排除了相关类的注册
内容的提问来源于stack exchange,提问作者Mohamad J Alanbaki
相关产品推荐
相关产品推荐

