懒汉单例模式线程安全
一个类中只有一个实例, 且能够自行实例化提供这个实例, 同时提供全局访问的方法.
结构1.构造私有化: 确保外部不能使用new直接创建对象2.内部静态属性创建实例3.对外公共静态获取对象方法
demo/** * 单例模式 * 1. 构造私有化: 确保外部不能使用new直接创建对象 * 2. 内部静态属性创建实例 * 3. 对外公共静态获取对象方法 * * @author liuzhihang * @date 2018/3/27 17:45 */public class SingletonPattern { private SingletonPattern() { } private static SingletonPattern singletonPattern = null; public static SingletonPattern getSingletonPattern() { if (singletonPattern == null) { singletonPa ...
poi读写Excel简单介绍
Apache POI 可以对Microsoft Office 进行操作, 下面是工作中使用的对Excel进行读写操作的常用方式.
引入依赖<!-- excel poi --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version></dependency><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version></dependency>
简单使用主要介绍读写时, 分别常用到的一些对象及其含义, 方便自己编写util.
package com.liuzh ...
protostuff序列化工具
介绍在很多地方都需要用到序列化, 比如在使用redis缓存对象时, 一般情况是实现java Serializable接口. 简单介绍下在慕课网学习到的一个新的序列化工具 —- protostuff.
在学习中介绍使用该工具可以大大减少对象序列化后字节所占空间, 并提高序列化时间等.
1.慕课网课程地址2.序列化相关工具比较
引入依赖<!-- protostuff 序列化工具 --><dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protostuff-core</artifactId> <version>1.1.3</version></dependency><dependency> <groupId>com.dyuproject.protostuff</groupId> <artifactId>protost ...
Transactional声明式事务
介绍1.声明式事务管理建立在AOP之上的. 其本质是对方法前后进行拦截, 然后在目标方法开始之前创建或者加入一个事务, 在执行完目标方法之后根据执行情况提交或者回滚事务.2.声明式事务最大的优点就是不需要通过编程的方式管理事务, 这样就不需要在业务逻辑代码中掺杂事务管理的代码, 只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式), 便可以将事务规则应用到业务逻辑中.3.声明式事务不足的地方在于, 与编程式事务相比, 只能作用到方法级别, 无法像编程式事务那样可以作用到代码块级别.
xml配置1.添加命名空间
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" . . . xmlns:aop="http://www.springframework.org/schema/aop& ...
整数包装类型的缓存
部分包装类型存在缓存机制, 会在JVM启动时, 缓存一定数量的对象, 有助于节省内存, 提高性能.
缓存区间
类型
范围
是否修改
Integer
-128 到 127
true : -XX:AutoBoxCacheMax=size 修改
ByteCache
-128 到 127
false
ShortCache
-128 到 127
false
LongCache
-128 到 127
false
CharacterCache
0 到 127
false
举例Integer a = 100;Integer b = 100;Integer c = 1000;Integer d = 1000;Integer e = new Integer(100);Integer f = Integer.valueOf(100);System.out.println(a == b); // trueSystem.out.println(c == d); // falseSystem.out.println(a == e); // falseSystem.out.pr ...
Interceptor拦截器
介绍Interceptor: 拦截器,作用类似 Filter, 主要作用是拦截用户请求, 在 Action 执行的前后各执行一段代码, 进行相应的业务处理.
作用权限认证统一逻辑处理日志监控等
使用方式及方法介绍使用方式分为两种, 一种为: 实现HandlerInterceptor接口或者是继承实现了HandlerInterceptor接口的类, 另一种为: 实现Spring的WebRequestInterceptor接口, 或者是继承实现了WebRequestInterceptor的类.1.HandlerInterceptor 介绍
package org.springframework.web.servlet;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public interface HandlerInterceptor { ...
utils工具--ValidationUtil 参数校验
在工作中不可避免的要面对很多参数校验, 比如写新接口时需要对传入VO的必要字段进行校验, String 是否为空, Integer 最小值, 对象是否为null, 等等.而使用 hibernate的validator工具对参数进行校验, 可以极大的简化流程, 当然不可避免的就是需要在被校验字段上加上注解信息.
1. 相关依赖<!-- 参数校验工具 --><dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.4.2.Final</version></dependency><dependency> <groupId>org.glassfish.web</groupId> <artifactId>el-impl</artifactId> < ...
xml解析--dom4j
在工作中有时候会用到dom4j对xml文件或者字符串进行解析, 以下内容为随手笔记, 防止以后遗忘.
1. 相关依赖<!-- dom4j --><dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version></dependency>
2. 获取dom对象获取dom对象方式主要以下几种:
// 读取 xml 文件 方式SAXReader reader = new SAXReader();Document doc1 = reader.read(new File("src/main/java/com/liuzhihang/tool/xml/alipay.xml"));// 解析 xml 文本 方式String aliPayStr = XmlTest.getAliPayStr();Document doc2 = Docum ...
xml解析--JaxbUtil
主要介绍使用jaxb对xml进行解析, 互转.
jaxb 是相对较多的xml工具, 只需要在javaBean的属性上添加相应注解, 就可以使用工具进行解析. 具体使用过程如下:
1. 编写javaBean并添加注解使用过程中一般常用@XmlRootElement, @XmlAccessorType, @XmlElement, @XmlAttribute四个注解, 其余使用方式可以再自行深入研究.
@XmlRootElement: 根元素@XmlAccessorType: java对象生成xml文件时对java对象属性的访问方式 属性为XmlAccessType.FIELD 指java所有成员变量@XmlElement: 子节点, name 可指定节点名@XmlAttribute: 映射为xml文件的属性, name 可指定属性名
javaBean:
@Data@XmlRootElement(name = "alipay")@XmlAccessorType(XmlAccessType.FIELD)class AliPayXml { @XmlE ...