首页 文章 精选 留言 我的

精选列表

搜索[java],共10014篇文章
优秀的个人博客,低调大师

Java总结 - ArrayDeque

这次来说一下ArrayDeque,我们先看一下他的类关系图,其中忽略掉了一些标记性接口 我们看一下类的定义public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializable {...} 从中我们可以看到他实现了Deque接口,那么Deque是实现了Queue<E>接口,如下是两个接口中的部分方法Queue: boolean add(E e); boolean offer(E e); E remove(); E poll(); E element(); E peek(); Deq

优秀的个人博客,低调大师

java json解析

关于json串的解析,有很多种方法,目前测出最方便最快的一个第三方jar包就是jackson。 1、需引用的jar有二:jackson-core-asl、jackson-mapper-asl。 2、使用:ObjectMapper mapper = new ObjectMapper(); json转bean: mapper. readValue(json, mybean.class); json转bean list:mapper.readValue(json, TypeFactory.collectionType(ArrayList.class,mybean.class)); bean转json: StringWriter sw = new StringWriter(); JsonGenerator gen = new JsonFactory().createJsonGenerator(sw); mapper.writeValue(gen, obj); sw.toString() 3、json串中有key为A,但指定转换的mybean中未定义属性A,会抛异常。处理:mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false),加上这一条,就没问题了,正常转换。 4、默认的json串,如果key或value类型非字符串,需要加上双引号的,但有些json包转换出来的json串却不一定会带上双引号。使用jackson时,如果非字符串未加双引号,也会报错。处理:mapper.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true)。

优秀的个人博客,低调大师

Java SPI机制

0 很久没有写博客了,这一两个月基本上就是找工作——离职——入职。到今天基本上入职近一个月了,在看公司代码的时候发现使用到了SPI技术来进行解耦,这篇文章主要写下SPI的基本使用。 1. SPI基本概念 SPI的全名叫Service Provider Interface,其主要是针对厂商或者插件的。我的理解就是上层提供接口,我们需要去实现,并且上层只需要根据我们的配置文件即可拿到我们的实现类(反射获取)。 2. SPI代码 先看下目录结构: 目录结构 2.1 接口定义 定义一个接口IStudy: public interface IStudy { void study(); } 2.2 编写实现类 编写两个实现类NormalStudy和SuperStudy: public class NormalStudy implements IStudy { @Override public void study() { System.out.println("normal study"); } } public class SuperStudy implements IStudy { @Override public void study() { System.out.println("super study"); } } 2.3 创建com.nick.test.IStudy文件 在src目录下创建META-INF\services\com.nick.test.IStudy文件,并在文件中添加两个实现类: com.nick.test.NormalStudy com.nick.test.SuperStudy 2.4 测试 public class Test { public static void main(String[] args) { ServiceLoader<IStudy> searches = ServiceLoader.load(IStudy.class); Iterator<IStudy> iterator = searches.iterator(); while (iterator.hasNext()) { iterator.next().study(); } } } 2.5 输出 结果 3 原理简单分析 大致原理其实通过上面的示例应该都知道了:通过读取META-INF/services/com.nick.test.IStudy文件的内容来确定接口对应的实现类,最终通过反射来进行实现类的加载。 核心代码: try { Enumeration<URL> resource = Test.class.getClassLoader().getResources("META-INF/services/" + IStudy.class.getName()); while (resource.hasMoreElements()) { URL url = resource.nextElement(); InputStream inputStream = url.openStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8")); String s; while ((s = bufferedReader.readLine()) != null) { System.out.println(s); } } } catch (IOException e) { e.printStackTrace(); } 输出: com.nick.test.NormalStudy com.nick.test.SuperStudy 最后通过反射加载并创建对象即可,原理还是很简单的!

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册