当前位置: 代码网 > it编程>编程语言>Java > Java跨模块调用方式

Java跨模块调用方式

2024年08月27日 Java 我要评论
java常见的调用其他类或包的方法spring iocspilistener/callbackeventbus(类比guava的事件总线)spring ioc将所有类的实例的生成和管理都交由第三方,调

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 …

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com