解决springboot多模块注入(@Bean、@Service、@Component)访问不到的问题

如果你因为Service注入失败,看过无数文章,甚至看过N份源码仍不得要领,希望我能终结你的问题;

SpringBoot中Service自动注入很方便,例:

Service.class(接口类)

ServiceImpl.class(实现类)

Controller.class(使用类)

用以上三个类来说一下自动注入:

单项目:分别ServiceImpl头上@Service,Controller中Service对象@Autowired即可享用;

Multi modules 场景,三个(种)类分别在三个module下:

moduleA : Service.class(com.example.moduleA )

moduleB : ServiceImpl.class ( com.example.moduleB )

moduleC : Controller.class ( com.example.moduleC )

此时B依赖A,C依赖A、B,添加好依赖关系。

如何自动注入?

1、接口、实现、使用类,姿势不变,按单项目方式写即可;

2、在moduleC的Application中做手脚!

如果你已经试过scanBasePackages,无论是在@SpringBootApplication方式还是@ComponentScan;

抑或试过@SpringBootApplication、@ComponentScan同时用,当你这么做时,一定是绝望的。

解决办法@SpringBootApplictaion(scanBasePackages=”com.example”)

核心就是:

Service 及 ServiceImpl均需在com.example包下

因为Service、ServiceImpl同在com.example下(C可以不在),所以我看作是同一次scan过程;

比如若是这样写scanBasePackages={” com.example.moduleA , com.example.moduleB “},则会失败;

当然(@ComponentScan=”com.example”)也是可以的,因为前者@SpringBootApplication已经包含@ComponentScan;

真相大白,相信这样很清楚了

欢迎您的到来,感谢您的支持!

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注