4 回答
TA贡献1868条经验 获得超4个赞
您的服务在com.homzhub.lms.service包下,因此您也必须将此包添加到其中@ComponentScan,因此 Spring 也会扫描此包并选择标有构造型的类:
@SpringBootApplication
@ComponentScan(basePackages = {"com.homzhub.lms.controller, "com.homzhub.lms.service"})
public class LmsApplication{
public static void main(String[] args){
SpringApplication.run(LmsApplication.class, args);
}
}
但是,我可以看到您的带有注释的类已经在所有包含您的组件的包之上,因此您可以完全@SpringBootApplication摆脱注释。@ComponentScan所以它会默认扫描嵌套包。
还要记住使用 Spring 构造型注释来注释您的服务类,@Service以便组件扫描能够拾取它们。
TA贡献1797条经验 获得超6个赞
如果还没有,您需要将其定义UserService
为组件,或更恰当地定义为服务。如果它已经是你必须映射它,考虑到 Spring 应该自己做这件事,这有点奇怪。
TA贡献1946条经验 获得超4个赞
取消@Autowired
注释。将@Service
注释放在实现类而不是接口上,并确保您的实现类可以通过componentScan
.
此外,作为旁注,Spring 将扫描主类(带@SpringBootApplication
注释的类)的所有子包。因此,如果您希望将实现保留在不同的包中,那么拥有com.homzhub.lms
一个像根和服务com.homzhub.lms.controller
控制器这样的目录结构是个好主意。com.homzhub.lms.service
com.homzhub.lms.service.impl
如果您遵循此结构,则不需要componentScan
.
TA贡献1887条经验 获得超5个赞
您只是在扫描com.homzhub.lms.controller
,UserService
不在 ComponentScan 下。您需要将服务包添加到 ComponentScan
@ComponentScan(basePackages = {"com.homzhub.lms"})
添加回答
举报