Java 类加载器详解

开始介绍类加载器和双亲委派模型之前,简单回顾一下类加载过程。

  • 类加载过程:加载->连接->初始化
  • 连接过程又可分为三步:验证->准备->解析

类加载过程

加载是类加载过程的第一步,主要完成下面 3 件事情:

  1. 通过全类名获取定义此类的二进制字节流
  2. 将字节流所代表的静态存储结构转换为方法区的运行时数据结构
阅读更多

使用 Spring Boot + Javassist 实现运行时动态添加和删除 Controller

引言

在某些特殊场景下,我们可能需要在 Spring Boot 应用运行时动态地添加或删除 Controller。本文将详细介绍如何使用 Javassist 和 Spring Boot 的内部机制来实现这个功能。

技术栈

  • Spring Boot 2.7.0
  • Javassist 3.29.0-GA
  • Java 8+

Maven 依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.29.0-GA</version>
</dependency>
</dependencies>
阅读更多

Spring Boot 手动将实例添加到IOC

添加实例进IOC

我们可以通过多种途径获取到:GenericApplicationContext 对象,可以使用该对象手动添加Bean进IOC容器,添加的方式有:

1
2
3
4
5
6
registerBean(Class<T>, Object...)
registerBean(String, Class<T>, Object...)
registerBean(Class<T>, BeanDefinitionCustomizer...)
registerBean(String, Class<T>, BeanDefinitionCustomizer...)
registerBean(Class<T>, Supplier<T>, BeanDefinitionCustomizer...)
registerBean(String, Class<T>, Supplier<T>, BeanDefinitionCustomizer...)
阅读更多

MyBatis 动态SQL实现

准备

SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE DATABASE test
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

use test;

CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO users (username, age, email) VALUES ('Alice', 30, 'alice@example.com');
INSERT INTO users (username, age, email) VALUES ('Bob', 25, 'bob@example.com');
INSERT INTO users (username, age, email) VALUES ('Charlie', 35, 'charlie@example.com');
INSERT INTO users (username, age, email) VALUES ('David', 28, 'david@example.com');
INSERT INTO users (username, age, email) VALUES ('Eve', 22, 'eve@example.com');
阅读更多

Spring Boot WebService服务搭建

XJC

xjc 是 Java Architecture for XML Binding (JAXB) 的一部分,它是一个命令行工具,用于将 XML 架构(XML Schema)转换为 Java 类。以下是 xjc 工具的基本用法:

基本命令格式

1
xjc [options] <schema file/URL/dir>
阅读更多

Java 8 新特性

Oracle 于 2014 发布了 Java8(jdk1.8),诸多原因使它成为目前市场上使用最多的 jdk 版本。虽然发布距今已将近 7 年,但很多程序员对其新特性还是不够了解,尤其是用惯了 Java8 之前版本的老程序员,比如我。

为了不脱离队伍太远,还是有必要对这些新特性做一些总结梳理。它较 jdk.7 有很多变化或者说是优化,比如 interface 里可以有静态方法,并且可以有方法体,这一点就颠覆了之前的认知;java.util.HashMap 数据结构里增加了红黑树;还有众所周知的 Lambda 表达式等等。本文不能把所有的新特性都给大家一一分享,只列出比较常用的新特性给大家做详细讲解。更多相关内容请看官网关于 Java8 的新特性的介绍

阅读更多

Java 9 新特性

Java 9 发布于 2017 年 9 月 21 日 。作为 Java 8 之后 3 年半才发布的新版本,Java 9 带来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如集合、Stream 流……。

你可以在 Archived OpenJDK General-Availability Releases 上下载自己需要的 JDK 版本!官方的新特性说明文档地址:https://openjdk.java.net/projects/jdk/

阅读更多

Java 11 新特性

Java 11 于 2018 年 9 月 25 日正式发布,这是很重要的一个版本!Java 11 和 2017 年 9 月份发布的 Java 9 以及 2018 年 3 月份发布的 Java 10 相比,其最大的区别就是:在长期支持(Long-Term-Support)方面,Oracle 表示会对 Java 11 提供大力支持,这一支持将会持续至 2026 年 9 月。这是据 Java 8 以后支持的首个长期版本。

下面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线。

阅读更多