Spring Bean
Spring Bean在 Spring 中,构成应用程序主体由 Spring IoC 容器管理的对象称为 Bean。Bean 是由 Spring IoC 容器实例化、装配和管理的对象。 Bean 以及它们之间的依赖关系反映在容器使用的配置元数据中。 Spring Bean 定义BeanDefinitionSpring IoC 容器本身,并不能识别配置的元数据。为此,要将这些配置信息转为 Spring 能识别的格式——BeanDefinition 对象。 BeanDefinition 是 Spring 中定义 Bean 的配置元信息接口,它包含: Bean 类名 Bean 行为配置元素,如:作用域、自动绑定的模式、生命周期回调等 其他 Bean 引用,也可称为合作者(Collaborators)或依赖(Dependencies) 配置设置,如 Bean 属性(Properties) BeanDefinition 元信息BeanDefinition 元信息如下: 属性(Property) 说明 Class 全类名,必须是具体类,不能用抽象类或接口 Name Bea...
理解 Java 类加载器
深度理解 Java SPISPI 简介SPI 全称 Service Provider Interface,是 Java 提供的,旨在由第三方实现或扩展的 API,它是一种用于动态加载服务的机制。它的作用是让程序能够自动发现、加载和使用第三方提供的实现,从而实现基于接口的解耦和可插拔的扩展架构。 Java SPI 有四个要素: SPI 接口:为服务提供者实现类约定的接口或抽象类。 SPI 实现类:实际提供服务的实现类。 SPI 配置:Java SPI 机制约定的配置文件,提供查找服务实现类的逻辑。配置文件必须置于 META-INF/services 目录中,并且,文件名应与服务提供者接口的完全限定名保持一致。文件中的每一行都有一个实现服务类的详细信息,同样是服务提供者类的完全限定名称。 ServiceLoader:Java SPI 的核心类,用于加载 SPI 实现类。 ServiceLoader 中有各种实用方法来获取特定实现、迭代它们或重新加载服务。 SPI 示例 定义接口需要定义一个 SPI 接口,和普通接口并没有什么差别。 123public interface Dat...
Spring Framework 综述
Spring Framework 综述更多教程可以查看:官方教程文档 Spring Framework 简介Spring Framework 是最受欢迎的企业级 Java 应用程序开发框架。用于构建企业级应用的轻量级、一站式解决方案。 核心思想Spring 最核心的两个技术思想是:IoC 和 Aop IoCIoC 即 Inversion of Control ,意为控制反转。 Spring 最认同的技术是控制反转的 依赖注入(DI) 模式。控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。 当编写一个复杂的 Java 应用程序时,应用程序类应该尽可能的独立于其他的 Java 类来增加这些类可重用可能性,当进行单元测试时,可以使它们独立于其他类进行测试。依赖注入(或者有时被称为配线)有助于将这些类粘合在一起,并且在同一时间让它们保持独立。 到底什么是依赖注入?让我们将这两个词分开来看一看。这里将依赖关系部分转化为两个类之间的关联。例如,类 A 依赖于类 B。现在,让我们看一看第二部分,注入。所有这一切都意味着类 B 将通过 I...
Java 编码和加密
Java 编码和加密Base64 编码Base64 原理Base64 内容传送编码是一种以任意 8 位字节序列组合的描述形式,这种形式不易被人直接识别。 Base64 是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的 ASCII 字符序列,常用在需用通过文本协议(比如 HTTP 和 SMTP)来传输二进制数据的情况下。Base64 并不是加密解密算法,尽管我们有时也听到使用 Base64 来加密解密的说法,但这里所说的加密与解密实际是指编码(encode) 和 解码(decode)的过程,其变换是非常简单的,仅仅能够避免信息被直接识别。 Base64 算法主要是将给定的字符以字符编码(如 ASCII 码,UTF-8 码)对应的十进制数为基准,做编码操作: 将给定的字符串以字符为单位,转换为对应的字符编码。 将获得字符编码转换为二进制 对二进制码做分组转换,每 3 个字节为一组,转换为每 4 个 6 位二进制位一组(不足 6 位时低位补 0)。这是一个分组变化的过程,3 个 8 位二进制码和 4 个 6 位二进制码的长度都是 24 位(3*8 = 4*6 = 24)。...
SpringBoot 知识清单
SpringBoot 知识图谱 预警:本文非常长,建议先 mark 后看,也许是最后一次写这么长的文章 说明:前面有 4 个小节关于 Spring 的基础知识,分别是:IOC 容器、JavaConfig、事件监听、SpringFactoriesLoader 详解,它们占据了本文的大部分内容,虽然它们之间可能没有太多的联系,但这些知识对于理解 Spring Boot 的核心原理至关重要,如果你对 Spring 框架烂熟于心,完全可以跳过这 4 个小节。正是因为这个系列的文章是由这些看似不相关的知识点组成,因此取名知识清单。 在过去两三年的 Spring 生态圈,最让人兴奋的莫过于 Spring Boot 框架。或许从命名上就能看出这个框架的设计初衷:快速的启动 Spring 应用。因而 Spring Boot 应用本质上就是一个基于 Spring 框架的应用,它是 Spring 对“约定优先于配置”理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于 Spring 生态圈的应用。 那 Spring Boot 有何魔法?自动配置、起步依赖、Actuator、命令行界面(CL...
commons-io 框架
IO框架commons-io 框架jar官网下载地址:https://commons.apache.org/proper/commons-io/download_io.cgi其中doc的jar解压之后,就是api文档。这是maven方式: 12345<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.16.1</version></dependency> 该框架提供了相关工具类: FileUtils 方法签名 说明 public static void copyFile(File srcFile, File destFile) 复制文件 public static void copyDirectory(File srcDir, File destDir) 复制文件夹 public static void deleteDi...
java 高级
Java 高级数据结构数组、列表、集合、映射、栈、队列、堆、树。 Java 集合框架 点击查看UML图 类型 描述 特点 常用实现类 Collection 单列数据集合的根接口 存储一组对象的容器 (它下面有List和Set) List 有序、可重复的集合 有索引,允许重复,元素有顺序 ArrayList, LinkedList, Vector Set 唯一、无序的集合 无索引,不允许重复元素,不保证顺序 HashSet(无序), LinkedHashSet(有序), TreeSet(升序) Map 双列数据的集合 存储键值对(Key-Value),Key唯一,排序由key决定 HashMap(无序), LinkedHashMap(有序), TreeMap(升序), Hashtable Collections 操作集合的工具类 提供了一系列静态方法,用于对集合进行排序、搜索、线程安全化等操作 (这是一个工具类,不是接口) 单列集合遍历 iterator 12345678List<Integer> list = new ArrayLis...
java 面向对象
面向对象 五大基本原则:单一职责原则(Single-Responsibility Principle)、开放封闭原则(Open-Closedprinciple)、Liskov替换原则(Liskov-Substituion Principle)、依较倒置原则(Dependency-lnversionPrinciple)和接口隔离原则(Interface-Segregation Principle)。 单一职责原则: 一个类最好只做一件事开放封闭原则: 对扩展开放、对修改封闭里氏替换原则: 子类必须能够替换其基类依赖倒置原则: 程序要依赖于抽象接口,而不是具体的实现接口隔离原则: 使用多个小的专门的接口,而不要使用一个大的总接口 Java继承继承的概念继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承的特性 子类拥有父类非 private 的属性、方法 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。 子类可以用自己的方式实现父类的方法。 Java 的继承是单继承,但是可以多重继承,单继承就...
JavaWeb 之 Servlet 指南
JavaWeb 之 Servlet 指南Servlet 简介没有找到官方文档,更多信息查看:菜鸟教程 什么是 ServletServlet(Server Applet),即小服务程序或服务连接器。Servlet 是 Java 编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态 Web 内容。 狭义的 Servlet 是指 Java 实现的一个接口。 广义的 Servlet 是指任何实现了这个 Servlet 接口的类。 Servlet 运行于支持 Java 的应用服务器中。从原理上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议的 Web 服务器。 Servlet 和 CGI 的区别Servlet 技术出现之前,Web 主要使用 CGI 技术。它们的区别如下: Servlet 是基于 Java 编写的,处于服务器进程中,他能够通过多线程方式运行 service() 方法,一个实例可以服务于多个请求,而且一般不会销毁; CGI(Common Gateway Interface...
sqlite
SQLite SQLite 是一个无服务器的、零配置的、事务性的的开源数据库引擎。 SQLite 简介SQLite 是一个C语言编写的轻量级、全功能、无服务器、零配置的的开源数据库引擎。 SQLite 的设计目标是嵌入式的数据库,很多嵌入式产品中都使用了它。SQLite 十分轻量,占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。SQLite 能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。 SQLite 大小只有 3M 左右,可以将整个 SQLite 嵌入到应用中,而不用采用传统的客户端/服务器(Client/Server)的架构。这样做的好处就是非常轻便,在许多智能设备和应用中都可以使用 SQLite,比如微信就采用了 SQLite 作为本地聊天记录的存储。 SQLite 语法和 mysql 差不多,不做详细记录,后面有遇到特殊的在做记录。 SQLite JAVA Client(1)...








