Java跨模块调用方式
Java常见的调用其他类或包的方法
- Spring IoC
- SPI
- Listener/Callback
- EventBus(类比Guava的事件总线)
Spring IoC
- 将所有类的实例的生成和管理都交由第三方,调用方从第三方拿到被调用方的实例,从而实现调用
SPI
- SPI即Service Provider Interface,调用方只有包含该方法的接口,需要调用方自己将获取到的接口实现类实例注入到容器中,再从容器中取出调用
- 使用SPI的示例:JDK自带的ServiceLoader.loader、Dubbo等
Listener/Callback
- Listener是一个集合,子模块A将要使用的方法所在接口的实例放在这个集合中,子模块B将这些接口的实现类塞进这个集合中,A要使用的时候就会看这个Listener集合具体哪些接口有实现,再通过接口的方式去调用
- 使用Listener/Callback的示例:常见的各种GUI、事件处理
EventBus
- 调用方通过总线去调用被调用方,调用方与被调用方使用同一个总线对象,调用方向总线发送某类型的事件对象,此时被调用方在总线注册自己的实例同时告诉总线自己订阅的事件类型,通过相同事件类型实现了调用方与被调用方之间的调用关系
- 调用方与被调用方之间的数据传输,将需要传输的数据作为某类型的事件对象的成员属性,在实现调用关系的同时,数据也得以传输
- 使用EventBus的示例:Guava的事件总线
Java两个模块之间调用service注入问题

遇到上述问题需要加入以下语句

@SpringBootApplication(scanBasePackages = {“com.heisenberg.weather.pro”,“com.heisenberg.authmgr”})
@MapperScan(basePackages = {“com.heisenberg.weather_pro.mapper”,“com.heisenberg.authmgr.dao”})
需要在调用别的模块的主程序上加入scanBasePackages 范围,要不然程序不知道你引用的是谁,并且要扫描创建的实体类的位置basePackages
否则出现以下情况:
No qualifying bean of type ‘com.zxq.api.dao.UserDao’ available: expected at least …
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
HttpMessageConverter报文信息转换器的深入讲解
在Spring中内置了大量的HttpMessageConverter,通过请求头信息中的MIME类型,选择相应的HttpMessageConverter,这篇文章主要给大家介绍了关于HttpMessageConverter报文信息转换器的相关资料,需要的朋友可以参考下2022-01-01
实例解决Java异常之OutOfMemoryError的问题
在本篇文章中,我们给大家分享了关于解决Java异常之OutOfMemoryError的问题的方法,有此需要的朋友们学习下。2019-02-02
IntelliJ IDEA 创建spring boot 的Hello World 项目(图解)
这篇文章主要介绍了IntelliJ IDEA 创建spring boot 的Hello World 项目的步骤详解,需要的朋友可以参考下2018-01-01
SpringBoot @Value注解支持配置自动刷新能力扩展方式
本文介绍了如何通过自定义注解和BeanPostProcessor实现SpringBoot中@Value注解的配置自动刷新能力,主要步骤包括:定义一个支持动态刷新的注解,实现配置的动态变更,以及通过BeanPostProcessor扫描并刷新使用@Value注解的变量2024-12-12
解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file
这篇文章主要介绍了解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-04-04


最新评论