Java
文章平均质量分 87
追逐消失的记忆
这个作者很懒,什么都没留下…
展开
-
JDK8 新特性 Lambda表达式
1.java8中Lambda表达式基础语法:(x,y) -> {}左侧是一个小括号,里面是要实现的抽象方法的参数,有几个参数就写几个参数名,无参可写空括号,无需声明参数类型;中间是一个jdk8新定义的箭头符号;右侧是一个大括号,在括号内编写抽象方法的实现内容,有参时,可直接使用左侧括号中的对应参数,与正常方法的方法体相同;使用方式:实现只有一个抽象方法的接口时会自行匹配到该方法,在箭头左侧编写对应参数个数的参数名,箭头右侧编写方法的实现代码(代码实现为单行时可去掉大括号{})示例:@Te原创 2021-08-06 11:01:30 · 274 阅读 · 0 评论 -
Filter中抛出异常的处理
Feileimport java.io.IOException;import java.util.ArrayList;import java.util.Collection;import java.util.LinkedList;import java.util.List;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax原创 2021-07-16 09:51:20 · 3543 阅读 · 0 评论 -
spring Transactional引出的AOP切面动态代理
在说明spring 中@Transactional的使用前,我们先看下被@Transactional注解的方法的调用链从上图可以看到方法testInternationalize()所调用的对象其实sun创建的Proxy的一个bean,并不是testInternationalize()方法所在接口实现类的真实bean,而是通过spring框架进行增强的proxy bean (spring 所创建的bean可能存在多层的AOP拦截,因此其调用的根本原理也就是依据JdkDynamicAopProxy 的原创 2021-05-08 16:50:54 · 525 阅读 · 0 评论 -
java 导出 excel “String literals in formulas can‘t be bigger than 255 characters ASCII“ 问题
在 java中当导出的excel数据存在下拉框的时,在下拉框的数据长度较小的情况下可以使用简单的下拉框导出模式private void createDropDownList(final HSSFWorkbook wb, final HSSFSheet sheet, final List<String> list,原创 2021-04-14 17:20:43 · 2090 阅读 · 0 评论 -
java 文件操作
//1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPath.exists()) { myFolderPath.mkdir(); } } catch (Exception e) { System.out.println("新建目录操作出错"); e.printStackTrace(); .原创 2020-12-22 13:59:29 · 107 阅读 · 0 评论 -
Spring 方法级别参数校验 之MethodValidationPostProcessor
你在书写业务逻辑的时候,是否会经常书写大量的判空校验。比如Service层或者Dao层的方法入参、入参对象、出参中你是否都有自己的一套校验规则?比如有些字段必传,有的非必传;返回值中有些字段必须有值,有的非必须等等~若你追求干净的代码,甚至有代码洁癖,如上众多if else的重复无意义劳动无疑是你的痛点,那么本文应该能够帮到你。 Bean Validation校验其实是基于DDD思想设计的,我们虽然可以不完全的遵从这种思考方式编程,但是其优雅的优点还是可取的,本文将介绍Spring为此提供的解决方案~转载 2020-10-22 16:28:33 · 4487 阅读 · 1 评论 -
spring aop切面实现对bean增强的过程
spring的两大核心就是ioc和aop。在关于ioc依赖注入的文章中,我们了解了如何根据BeanDefinition创建Bean,然后在BeanPostProcessor中处理@Autowired和@Resource两个注解,自动注入Bean。本文将讲解另外一块核心内容,aop切面。注册AnnotationAwareAspectJAutoProxyCreator 触发AnnotationAwareAspectJAutoProxyCreator...转载 2020-09-27 16:31:42 · 2237 阅读 · 0 评论 -
CGLIB动态代理在Spring AOP应用中的运用
首先子这里我同个一个实例引入CGLIB在spring AOP中的使用业务启动测试类import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import com.wangyong.learn.project.spring.test.BaseTest;/** * @author Administrator */public class TesAopt extends Base原创 2020-09-25 15:19:21 · 289 阅读 · 0 评论 -
CGLIB动态代理实现原理
CGLIB(Code Generator Library)是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。Hibernate作为一个比较受欢迎的ORM框架,同样使用CGLIB来代理单端(多对一和一对一)关联(延迟提取集合使用的另一种机制)。CGLIB代理主要通过对字节码的操作,为对象引入间接级别,以控制对象的访问。JDK动态代理虽然简单易用,但是其有一个致命缺陷是,只能对接口进行代理。如果要代理的类为一个普通类、没有接口,那么Java动态原创 2020-09-16 17:28:39 · 438 阅读 · 0 评论 -
ThreadPoolExecutor线程池源码
一、ThreadPoolExecutor的重要参数corePoolSize:核心线程数 核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭 queueCapacity:任务队列容量(阻塞队列) 当核心线程数达...原创 2019-07-09 14:46:09 · 279 阅读 · 0 评论 -
java.util.concurrent 包 的LinkedBlockingQueue学习
LinkedBlockingQueue是一个用于并发环境下的阻塞队列集合类,它可以用于生产-消费者模型。阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供了四种处理方法:方法\处理方式 抛出异常原创 2020-09-10 16:48:58 · 1077 阅读 · 0 评论 -
Thread的run()与start()的区别
1、start()、run()方法的定义区分start(): 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止。然后CPU再调度其它线程。 一旦得到cpu时间片,就开始执行r...原创 2020-09-07 17:47:19 · 8383 阅读 · 0 评论 -
Java 中关于Native关键字的解释
关于JNI 概念首先要讲一下JNI。Java很好,使用的人很多、应用极 广,但是Java不是完美的。Java的不足体现在运行速度要比传统的C++慢上许多之外,还有Java无法直接访问到操作系统底层如硬件系统,为此 Java提供了JNI来实现对于底层的访问。JNI,Java Native Interface,它是Java的SDK一部分,JNI允许Java代码使用以其他语言编写的代码和代码库,本地程序中的函数也可以调用Java层的函 数,即JNI实现了Java和本地代码间的双向交互。Native 解释:原创 2020-09-04 11:16:35 · 238 阅读 · 0 评论 -
Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
Java中的运算符(操作符) 程序的基本功能是处理数据,任何编程语言都有自己的运算符。因为有了运算符,程序员才写出表达式,实现各种运算操作,实现各种逻辑要求。 为实现逻辑和运算要求,编程语言设置了各种不同的运算符,且有优先级顺序,所以有的初学者使用复杂表达式的时候搞不清楚。这里详细介绍一下Java中的运算符。 Java运算符很多,下面按优先顺序列出了各种运算符。 优先级 运算符分类 结合顺序 运算符 由 高 到 低 ...转载 2020-09-03 14:43:12 · 335 阅读 · 0 评论 -
java retry的使用详解
retry 通常是与循环的break和continue联合使用的retry后面跟循环,标记这个循环的位置。我们可以在continue或者break后面加retry,表示要跳到这个循环,其中break表示要跳过这个标记的循环,continue表示从这个标记的循环继续执行。下面附上一些例子帮助大家理解。首先我们来上一个正常的for循环:上面是单一使用break和continue情况下循环的运行状态上面是retry 联合break和continue使用的运行结果发现:当retr原创 2020-09-03 11:43:16 · 866 阅读 · 0 评论 -
Java NIO:Buffer、Channel 和 Selector
本文将介绍 Java NIO 中三大组件 Buffer、Channel、Selector 的使用。本来要一起介绍非阻塞 IO 和 JDK7 的异步 IO 的,不过因为之前的文章真的太长了,有点影响读者阅读,所以这里将它们放到另一篇文章中进行介绍。Buffer一个 Buffer 本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据。java.nio 定义了以下几个 Buffer 的实现,这个图读者应该也在不少地方见过了吧。其实核心是最后的 ByteBuffer,前面转载 2020-08-25 17:37:52 · 412 阅读 · 0 评论 -
Java SPI思想梳理
一、简介SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻zhao服务实现。Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。为什么要使用spi面转载 2020-07-27 14:12:11 · 323 阅读 · 0 评论 -
为什么SpringBoot中main方法执行完毕后程序不会直接退出
针对这个问题我们可以转化一下思路:一个JVM进程,在什么情况下会正常退出?大部分人应该都知道使用System.exit()或Runtime.exit()可以直接导致当前JVM进程退出,但是仔细想想这个好像跟SpringBoot没啥关系哈另外一个可能会导致进程退出的是所有的非daemon进程完全终止,那么根据这个条件反推的话是不是说只要保证SpringBoot进程中包含1个以上的daemon进程就可以保证程序不会退出接下来我们去看下SpringBoot是如何基于这个特性实现的我们以Spring原创 2020-07-24 16:21:37 · 5098 阅读 · 1 评论 -
jdk源码解析 Object超类里面的wait()和notify()底层实现
Object.wait/notify(All)大家都知道主要是协同线程处理的,大家用得也很多,大概逻辑和下面的用法差不多package com.wangyong.learn.project.spring;public class StartSpringContextKeepActveStatus { public static void main(String[] args) { final Object resrouce = StartSpringContextKeep原创 2020-07-24 16:15:53 · 1920 阅读 · 0 评论 -
spring是怎样管理mybatis的及注入mybatis mapper bean的
1.spring启动mybatis的两个重要类:SqlSessionFactoryBean和MapperFactoryBean,这两个类都是org.mybatis.spring jar包的。是用来启动mybatis的关键,spring为什么能识别这两个类?因为这两个类实现了spring的接口。这里面的重点就是 org.mybatis.spring.SqlSessionFactoryBean 与 org.mybatis.spring.mapper.MapperFactoryBean[b] 实现了 sp原创 2020-07-10 15:39:33 · 1360 阅读 · 1 评论 -
Spring中的InitializingBean接口的使用
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。测试,如下:package com.wangyong.learn.project.init.beans;import org.springframework.beans.factory.InitializingBean;/** * spring bean的拓展 * * @author wy */publi原创 2020-07-10 15:13:50 · 286 阅读 · 0 评论 -
Java 动态字节码操作
运行时操作字节码可以让我们实现如下功能: 动态生成新的类 动态改变某个类的结构(添加/删除/修改 新的属性/方法)java常见的字节码操作类库BCEL Byte Code Engineering Library (BCEL) ,这是 Apache Software Foundation 的 Jakarta 项目的一部分。 BCEL 是 Java classworking 广泛 使用的一种 框架 , 它 可以让您深入 JVM 汇编语言进行类操作的细节。 BCEL 与 Java...转载 2020-06-30 15:23:38 · 395 阅读 · 0 评论 -
java端口监听(模拟tomcat处理请求过程)
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就...原创 2020-05-21 17:15:18 · 1435 阅读 · 0 评论 -
Tomcat运行原理(一)--- socket通讯
说起tomcat首先很容易联想到IIS,由此认识了IIS,它是一个web容器,天生的多线程,及时响应用户提交的请求返回html页面,这就是我了解的最初的web容器的功能,由此我们来认识tomcat也并不困难,可以的话,在了解完tomcat后我们可以继续了解jboss、jetty等,好我们进入主题。 我们在平时开发的过程中是在使用eclipse时候才启动tomcat,对于一个web容器而言,简而言之,它是系统的一个守护进程,守护着对这台服务器某个端口发起的请求,基于这一点,它就需要一个监听程序,这个监听原创 2020-05-21 10:23:17 · 697 阅读 · 1 评论 -
ThreadLocal
在阅读Handler源码时发现了这么一个东西,本想直混在其他博客中一笔带过,但仔细想了下这个东西还是蛮重要的,于是开了这篇博客。ThreadLocalthreadlocal使用方法很简单static final ThreadLocal<T> sThreadLocal = new ThreadLocal<T>();sThreadLocal.set()sThreadLocal.get()threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,数据转载 2020-05-13 17:53:49 · 131 阅读 · 0 评论 -
java -D简介
很多时候我们需要在项目中读取外部属性文件,用到了System.getProperty("")方法。这个方法需要配置JVM系统属性,那么如何配置呢?那就是使用java -D 配置系统属性。使用格式是:java -Dkey=value比如新建一个测试类,如下:public class Test { public static void main(String[] args){...转载 2020-04-14 14:06:03 · 10454 阅读 · 0 评论 -
java动态代理Proxy.newProxyInstance
利用Java的反射技术(Java Reflection),在运行时创建一个实现某些给定接口的新类(也称“动态代理类”)及其实例(对象),代理的是接口(Interfaces),不是类(Class),也不是抽象类。在运行时才知道具体的实现,spring aop就是此原理。在spring中主要处理业务思路的两种方式,一、通过动态代理的原理,使需要进行切面处理的业务。通过代理技术将需要切入的业务前...原创 2019-12-03 16:59:27 · 2810 阅读 · 0 评论 -
Java运行参数设置
1.概述Java支持的运行参数包括如下几种:标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容;非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;非Stable参数(-XX):此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;2. 标准参数标准参数又可以分为如下几种:运行模式相关的,如-serv...转载 2019-09-10 11:40:22 · 486 阅读 · 0 评论 -
spring 容器几种启动方式
1、spring ioc容器web项目中通过servlet机制启动spring容器具体启动实现方式:<!-- Spring监听器 --><listener> <description>Spring监听器</description> <listener-class>org.springframework.web....原创 2019-01-31 16:05:27 · 2528 阅读 · 0 评论 -
mysql 使用指令将数据导出
1、在安装有mysql服务的主机上执行mysql指令如:mysql -h127.0.0.1 -u用户名 -p密码 -e "SELECT tu.nickname AS '姓名',tu.login_user AS '手机' FROM tb_user tu " 数据库名 > /home/dev/test.xls上面是直接通过命令导出2、如果是需要使用通过java将数据导出到一个文件...原创 2019-01-21 13:39:44 · 214 阅读 · 1 评论 -
spring ioc理解
一直对于spring 的ioc的理论描述概念比较模糊,不能有一个系统的认识,于是这段时间通过翻阅书籍以及网上查询资料有了一个比较系统性的解释。spring的ioc描述又名DI(Dependency Injection)依赖注入。其意思是将调用者需要的对象的依赖关系交由第三方进行管理,以及注入。通过翻阅书籍理解IOC的原理是:将业务场景(business)、业务场景进行行为操作...原创 2019-01-15 16:22:55 · 652 阅读 · 0 评论 -
Java 代码优化
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15766297/article/details/70503222代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就...转载 2019-01-25 14:01:53 · 179 阅读 · 0 评论 -
关于sql一对多搜索分组排序优化问题
在一次项目场景中现有A、B、C、D三张表,A和B、C的映射关系分别是一对多的关系,A表为业务信息主表,B、C为业务从表(存放各类D表的code,A的关联外键),D为用户信息(包括存放用户各种code)业务需求为,搜索A表的主体信息,且根据一定的规则进行排序:用户的code同时等于B、C的code为第一优先级,用户code等于B的code排在第二优先级,用户code等于C的code排在第三优...原创 2019-01-17 18:29:32 · 993 阅读 · 0 评论 -
spring启动加载bean的过程
参考网站:https://blog.csdn.net/aini201/article/details/77097314当Web应用启动时,contextInitialized方法会执行载入根上下文(IOC容器):(1)spring的web项目启动的时候会,启动我们常用的监听类。 <context-param><param-name>contextCo...原创 2019-01-11 17:32:27 · 1944 阅读 · 0 评论 -
通过tomcat容器启动spring容器的启动过程
参考网站:https://www.cnblogs.com/RunForLove/p/5688731.html通过对spring源码的解读,跟踪spring容器的启动过程,掌握SpringMVC是如何工作的;掌握Spring源码的设计和增强阅读源码的技巧。为可持续性的使用spring框架高效集成开发,解决系统一些疑难杂症提供强有力的支撑。一、需要掌握的理论业务点:1、Web容器初始化过程...原创 2019-01-11 16:40:50 · 9812 阅读 · 2 评论 -
通过ServletContextListener监听进行数据的初始化
2、由于web容器在启动的过程中实现了对ServletContextListener这个接口的监听,当程序中有ServletContextListener这个接口被实例化的时候,web容器会让其运行contextInitialized()这个方法package com.wangyong.app.web.listener;import com.wangyong.app.sys.facade...原创 2019-01-11 16:24:58 · 1105 阅读 · 0 评论 -
JVM-内存区域
Java程序执行流程:谈一谈Java内存区域的划分实际上是指JVM内存区域的划分,首先Java先介绍一下Java程序具体执行的过程如上图所示,首先Java源代码们(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕后,交给JVM执行引擎.在整个程序的执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相...翻译 2018-12-13 15:35:46 · 98 阅读 · 0 评论 -
java web 服务的web.xml详解
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="原创 2018-10-10 11:25:37 · 164 阅读 · 0 评论 -
数据库分表分库
一、MySQL扩展具体的实现方式随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。关于数据库的扩展主要包括:业务拆分、主从复制,数据库分库与分表。这篇文章主要讲述数据库分库与分表(1)业务拆分在 大型网站应用之海量数据和高并发解决方案总结一二 一篇文章中也具体讲述了为什么要对业务进行拆分。业务起步初始,为了加快应用上线和快速迭代,...原创 2018-10-10 11:01:37 · 442 阅读 · 0 评论 -
windows 配置jdk环境变量
系统变量→新建 JAVA_HOME 变量 。 变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; (注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码) 系统变量→新建 CLASSP...原创 2018-10-09 15:00:10 · 1053 阅读 · 0 评论