1.什么是SPI      SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。 2.SPI和API的使用场景     API (Application Programming Interface)在大多数情况下,都是实现方制定接口并完成对接口的实现,调用方仅仅依赖接口调用,且无权选择不同实现。 从使用人员上来说,API 直接被应用开发人员使用。     SPI (S…

2021年4月16日 1条评论 9点热度 0人点赞 李锋镝 阅读全文

本文简单说一说JVM应如何调优。 Java语言本身的成功,除了天时地利人和,JVM功不可没。 毫不夸张地说,JVM是现代软件工程最成功的案例之一。它规模庞大,代码极其复杂,但运行极其稳定可靠,所以,许多厂商的核心业务系统,才敢放心地用Java编写,运行在JVM之上。 因为JVM自带GC,又有无数可以微调的参数,所以,JVM调优,现在已经被当作Java面试的必考知识点,精通JVM调优参数的童鞋,可以冠名微操小王子。 写了这么多年的Java程序,很遗憾,我迄今为止只会用两个参数:XMS和XMX,能正确写出如下启动脚本:…

2021年3月26日 0条评论 487点热度 2人点赞 李锋镝 阅读全文

经常在其它各个地方在说公司禁止使用Lombok,我一直不明白为什么不让用,今天看到一篇文章列举了一下“缺点”,这里我只想狠狠地反驳,看到列举的理由我竟无言以对。   JDK 版本问题 当我想要将现有项目的 JDK 从 Java 8 升级到 Java 11 时,我发现 Lombok 不能正常工作了。于是我不得不将所有的 Lombok 注解从项目源代码中清除,并使用 IDE 自带的功能生成 getter/setter,equals,hashCode,toString 以及构造器等方法,你也可以使用 Delom…

2021年3月3日 0条评论 580点热度 2人点赞 李锋镝 阅读全文

摘要:一问一答的形式轻松学习掌握java工具。 以一问一答的形式学习java工具 Q:检查内存泄露的工具有? A: jmap生成dump转储文件,jhat可视化查看。 Q:某进程CPU使用率一直占满,用什么工具可以排查? A: top -Hp pid找到最占CPU的线程 然后jstack来查找那个线程此时所处的堆栈,确定问题发生位置。 § 各工具详细介绍 § jstack 全称: JVM Stack Trance 作用: 查看某个java进程的堆栈情况, 可用于确认死锁、IO等待、死循环等问题。 命令用法: jst…

2021年2月19日 0条评论 603点热度 0人点赞 李锋镝 阅读全文

摘要:在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历。 在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历。这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面一起学习学习吧。 方式一 通过Map.keySet使用iterator遍历 @Test public void testHashMap1() { Map<Integer, Str…

2021年2月19日 0条评论 584点热度 1人点赞 李锋镝 阅读全文

报错信息大概如下: Error running 'xxx': Command line is too long. Shorten command line for xxx or also for Application default configuration. 解决方案(1): 找到项目下的.idea/workspace.xml,在标签<component name="PropertiesComponent">里添加一行属性:<property name="dyn…

2021年2月18日 0条评论 629点热度 1人点赞 李锋镝 阅读全文

前言 Shiro作为常用的权限框架,可被用于解决认证、授权、加密、会话管理等场景。Shiro对其API进行了友好的封装,如果单纯的使用Shiro框架非常简单。但如果使用了多年Shiro,还依旧停留在基本的使用上,那么这篇文章就值得你学习一下。只有了解Shiro的底层和实现,才能够更好的使用和借鉴,同时也能够避免不必要的坑。 下面以官方提供的实例为基础,讲解分析Shiro的基本使用流程,同时针对认证和授权流程进行更底层的原理讲解,让大家真正了解我们所使用的Shiro框架,底层是怎么运作的。 Shiro组成及框架 在学…

2021年2月16日 0条评论 587点热度 0人点赞 李锋镝 阅读全文

Spring Boot中提供了一系列的注解比如@ImportAutoConfiguration和@EnableAutoConfiguration,它们最终都组合了@Import注解,那么,它们之间有什么区别呢? @ImportAutoConfiguration是否可以替代@Import注解?@ImportAutoConfiguration和@EnableAutoConfiguration是否效果相同? 从根本上来说,@ImportAutoConfiguration是@Import的增强,限制了它使用的特定范围。 使…

2021年1月26日 0条评论 603点热度 2人点赞 李锋镝 阅读全文

最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次加载后,会长期留驻JVM,直到JVM退出。这个说法,是不是正确的? 2) 在开发的一个集成平台中,需要集成类似接口的多种工具,并且工具可能会有新增,同时在不同的环境部署会有裁剪(例如对外提供服务的应用,不能提供特定的采购的工具),如何才能更好地实现? 针对上面的第2点,我们采用Java插件化开发实现。上面的两个问题,都和Java的类加载和热替换机制有关。 1. Java的类加载器和双亲委派模型 1.1 Java类加载…

2021年1月22日 0条评论 578点热度 0人点赞 李锋镝 阅读全文

引入SpringBoot本来就支持REST服务,因此在SpringBoot项目之间经常需要通过REST的形式来相互调用。本文以具体的实例带大家了解一下SpringBoot中怎么使用RestTemplate进行接口调用。同时,会讲解部分相关源码。 RestTemplate的实例化 RestTemplate实例通常需要自己进行定制,SpringBoot相关的自动配置bean。但是,SpringBoot提供了自动配置的RestTemplateBuilder,可以用它来创建RestTemplate实例。 那么,Spring…

2021年1月19日 0条评论 651点热度 0人点赞 李锋镝 阅读全文
123458