54 归档分页
370 留言互动
4 核心专题

最近更新

Java 2021-10-27

Spring AOP底层原理

Spring AOP 通过动态代理实现横向切面功能。若目标对象实现接口,Spring 使用 JDK Proxy 创建与接口同级的代理对象;若未实现接口,则采用 CGLIB 生成目标类的子类作为代理。代理对象在运行时拦截方法调用,实现与原实现类相同的功能,而无需修改源代码,从而完成 AOP 的横向扩展。

Spring 阅读全文
Java 2021-11-01

JVM之RTTI与反射

RTTI(运行时类型识别)通过获取 Class 对象来在运行时获取已知类的完整信息,获取方式包括 Class.forName、.class 和对象的 getClass(),前者会立即初始化类,后者在首次使用静态成员时才初始化。反射则用于编译时未知的类:在运行时加载对应的 .class 文件后,可通过 Class 的 getMethods、getConstructors 等获取 Method、Constructor 对象并实例化对象。核心区别在于 RTTI 需要编译期已知类名并在编译时检查 .class,而反射在运行时才打开并检查 .class,实现对未知类型的动态操作。

JVM 反射 阅读全文
Java 2021-11-01

getField和getDeclaredField的区别

getField只能获取public字段并包括父类继承的成员,而getDeclaredField只能获取本类声明的所有字段(包括private),但不返回继承字段;对private字段需调用setAccessible(true)才能读写。示例中通过反射分别操作Person的private age和public money,得到相应的初始值并成功修改。文章还概括了反射的优点——运行时动态获取类、提升灵活性和可与动态编译结合实现强大功能;缺点——性能开销大、相对不安全且破坏封装。

反射 阅读全文
Java 2021-10-29

常用设计模式

文章介绍了几种常用设计模式及其在业务代码中的实践。首先通过文件解析的例子说明 if…else 分支违背开闭原则和单一职责,提出策略模式的定义、接口抽象和基于 Spring 自动装配的实现方式。随后以订单校验为场景,指出使用异常做流程控制的问题,阐释责任链模式的概念、抽象处理器结构以及在 Spring 中通过注解和链式初始化完成各校验节点的组织。最后简要提出模板方法模式在统一请求流程(如商户信息查询、报文加签、HTTP 调用)中的作用。整体强调通过这些模式提升代码可维护性、可扩展性和职责分离。

设计模式 阅读全文
Java 2021-10-17

JVM垃圾收集器ParNew&CMS与底层三色标记算法

文章介绍了JVM分代回收的基本原理,阐述了新生代采用复制算法、老年代使用标记‑清除或标记‑整理的原因,并详细比较了Serial、Parallel、ParNew、CMS等收集器的实现与适用场景。重点解析了CMS的四阶段并发标记、三色标记、写屏障及其产生的浮动垃圾、漏标问题,提供了ParNew+CMS在大流量电商系统中的参数调优方案,强调通过合理设置堆、Survivor、晋升阈值等可降低Full GC频率,提高响应时延。

Java 2021-10-28

Class对象的创建方式

本文演示了在 Java 中获取 Class 对象的五种常用方式:①通过实例调用 getClass();②使用 Class.forName(全限定名);③直接使用类字面量 .class;④通过基本类型包装类的 TYPE 字段获取原始类型 Class;⑤利用已有 Class 对象的 getSuperclass() 获取父类的 Class。代码示例分别展示了每种方法的使用及输出结果,帮助读者理解反射机制中 Class 对象的获取途径。

反射 阅读全文