JDK8 入门指南
JDK8 入门指南 JDK8 升级常见问题章节是我个人的经验整理。其他内容基本翻译自 java8-tutorial 📦 本文以及示例源码已归档在 javacore 关键词:Stream、lambda、Optional、@FunctionalInterface Default Methods for Interfaces(接口的默认方法)Java 8 使我们能够通过使用 default 关键字将非抽象方法实现添加到接口。这个功能也被称为虚拟扩展方法。 这是我们的第一个例子: 1234567interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); }} 除了抽象方法 calculate ,接口 Formula 还定义了默认方法 sqrt。具体类只需要执行抽象方法计算。默认的方法 sqrt 可以用于开箱即用。 123456789Formula formula = new Form...
Spring 之 JDBC
Spring 之 JDBCJDBC 是 Java 语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了增、删、改、查数据库的方法。 JDBC 入门示例JDBC 的工作步骤大致如下: 创建实体类。 声明数据库读写接口的 DAO 接口。定义 DAO 的好处在于对于数据层上层的业务,调用 DAO 时仅关注对外暴露的读写方法,而不考虑底层的具体持久化方式。这样,便于替换持久化方式。 创建一个 DAO 接口的实现类,使用 Spring 的 JDBC 模板去实现接口。 最后,定义一个 DAO 接口的实现类的 JavaBean,并将数据源注入进去。 假设,我们要通过 Spring + JDBC 访问一张 Mysql 数据表 user,user 表的数据结构如下: 123456789101112131415-- 创建用户表CREATE TABLE `user` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` VARCHAR(255) ...
Spring 之 JPA
Spring 之 JPAJPA 为对象关系映射提供了一种基于 POJO 的持久化模型。 简化数据持久化代码的开发 为 Java 社区屏蔽不同持久化 API 的差异 快速入门(1)在 pom.xml 中引入依赖 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency> (2)设置启动注解 123456789101112// 【可选】指定扫描的 Entity 目录,如果不指定,会扫描全部目录@EntityScan("io.github.dunwu.springboot.data.jpa")// 【可选】指定扫描的 Repository 目录,如果不指定,会扫描全部目录@EnableJpaRepositories(basePackages = {"io.githu...
深入理解 Java 异常
深入理解 Java 异常 异常框架ThrowableThrowable 是 Java 语言中所有错误(Error)和异常(Exception)的超类。在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。 Throwable 包含了其线程创建时线程执行堆栈的快照,它提供了 printStackTrace() 等接口用于获取堆栈跟踪数据等信息。 主要方法: fillInStackTrace - 用当前的调用栈层次填充 Throwable 对象栈层次,添加到栈层次任何先前信息中。 getMessage - 返回关于发生的异常的详细信息。这个消息在 Throwable 类的构造函数中初始化了。 getCause - 返回一个 Throwable 对象代表异常原因。 getStackTrace - 返回一个包含堆栈层次的数组。下标为 0 的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。 printStackTrace - 打印 toString() 结果和栈层次到 System.err,即错误输出流。 ...
Java 控制语句
Java 控制语句 Java 控制语句大致可分为三大类: 选择语句 if, else-if, else switch 循环语句 while do…while for foreach 中断语句 break continue return 选择语句if 语句if 语句会判断括号中的条件是否成立,如果成立则执行 if 语句中的代码块,否则跳过代码块继续执行。 语法 123if(布尔表达式) { //如果布尔表达式为true将执行的语句} 示例 12345678910public class IfDemo { public static void main(String args[]) { int x = 10; if (x < 20) { System.out.print("这是 if 语句"); } }}// output:// 这是 if 语句 if…else 语句if 语句后...
SpringBoot 之属性加载详解
SpringBoot 之属性加载详解加载 property 顺序Spring Boot 加载 property 顺序如下: Devtools 全局配置 (当 devtools 被激活 ~/.spring-boot-devtools.properties). 测试环境中的 @TestPropertySource 注解配置 测试环境中的属性 properties:@SpringBootTest 和 测试注解. 命令行参数 SPRING_APPLICATION_JSON 属性 ServletConfig 初始化参数 ServletContext 初始化参数 JNDI attributes from 通过 java:comp/env 配置的 JNDI 属性 Java 系统属性 (System.getProperties()) 操作系统环境比那里 RandomValuePropertySource 加载 random.* 形式的属性 jar 包外的 application-{profile}.properties 或 application-{profile...
Spring IoC
Spring IoCIoC 简介IoC 是什么IoC 即控制反转(Inversion of Control,缩写为 IoC)。IoC 又称为依赖倒置原则(设计模式六大原则之一),它的要点在于:程序要依赖于抽象接口,不要依赖于具体实现。它的作用就是用于降低代码间的耦合度。 IoC 的实现方式有两种: 依赖注入(Dependency Injection,简称 DI):不通过 new() 的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用。 依赖查找(Dependency Lookup):容器中的受控对象通过容器的 API 来查找自己所依赖的资源和协作对象。 理解 Ioc 的关键是要明确两个要点: 谁控制谁,控制什么:传统 Java SE 程序设计,我们直接在对象内部通过 new 进行创建对象,是程序主动去创建依赖对象;而 IoC 是有专门一个容器来创建这些对象,即由 Ioc 容器来控制对象的创建;谁控制谁?当然是 IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。 为何是...
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...
SpringBoot 之应用 EasyUI
SpringBoot 之应用 EasyUI EasyUI 是一个简单的用户界面组件的集合。由于 EasyUI 已经封装好大部分 UI 基本功能,能帮用户减少大量的 js 和 css 代码。所以,EasyUI 非常适合用于开发简单的系统或原型系统。 本文示例使用技术点: Spring Boot:主要使用了 spring-boot-starter-web、spring-boot-starter-data-jpa EasyUI:按需加载,并没有引入所有的 EasyUI 特性 数据库:为了测试方便,使用 H2 简介什么是 EasyUI? easyui 是基于 jQuery、Angular.、Vue 和 React 的用户界面组件的集合。 easyui 提供了构建现代交互式 javascript 应用程序的基本功能。 使用 easyui,您不需要编写许多 javascript 代码,通常通过编写一些 HTML 标记来定义用户界面。 完整的 HTML5 网页框架。 使用 easyui 开发你的产品时可以大量节省你的时间和规模。 easyui 使用非常简单但功能非常强大。 Sprin...
深入理解 Java 枚举
深入理解 Java 枚举简介enum 的全称为 enumeration, 是 JDK5 中引入的特性。 在 Java 中,被 enum 关键字修饰的类型就是枚举类型。形式如下: 1enum ColorEn { RED, GREEN, BLUE } 枚举的好处:可以将常量组织起来,统一进行管理。 枚举的典型应用场景:错误码、状态机等。 常用模板1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556public enum FileTypeEnum { /** * 配置文件 * */ CONFIG(1,"配置文件"), /** * 表结构文件 * */ SQL_DATA_FIELD(2,"表结构文件"), /** * sqlData普通文件 * */ SQL_...