Field ... in ... 无法找到 'service' 类型的 bean

Field ... in ... a bean of type 'service' that could not be found

我正在尝试使用外部库中的对象,但是当我使用@Autowired 属性 时,应用程序找不到它。

主应用有如下注解:

@SpringBootApplication
@ComponentScan(basePackages = {"com.XXXX.prj.business.modules"})
@EntityScan("com.XXXX.prj")
@EnableJpaRepositories(basePackages = {"com.XXXX.prj.business.modules.repositories"})

在com.XXXX.prj.business.modules中我有一个class调用依赖的对象,叫做MailService,这样:

@Component
public class MailNotificatorImpl implements Notificator {

    @Autowired
    private MailService mailService;

问题来了,找不到这个 mailService 对象作为 bean 类型。 MailService 在一个名为 YYYY-commons 的外部库中。库的class有接口和实现,实现有这个注解:

@Service("mailService")
public class MailServiceImpl extends GenericService implements MailService, Serializable {

我不知道我做错了什么,因为在其他应用程序中我以相同的方式使用并且它正在工作。

你能帮我一些忙吗?非常感谢!

在您的组件扫描中,您只扫描定义的包,以及那里的任何 sub-package。这意味着第三方库未被组件扫描捕获,因此未注册 bean。

您的选择是:

  1. 在您的主应用程序上使用 @ComponentScan 注释 class 并添加您自己的基础包和第三方库的包。
@ComponentScan(basePackages = {"my.base.package", "third.party.package"})
public class MySpringBootApplication{}
  1. 通过添加类似下面的内容来自己注册 bean,例如您的主要应用程序 class:
@Bean
public MailService mailServiceBean() {
  return new MailServiceImple();
}