自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (2)
  • 收藏
  • 关注

原创 ThreadLocal 原理分析

ThreadLocal 实现原理ThreadLocal的实现是这样的:每个Thread 维护一个 ThreadLocalMap 映射表,这个映射表的 key 是 ThreadLocal 实例本身,value 是真正需要存储的 Object。也就是说 ThreadLocal 本身并不存储值,它只是作为一个 key 来让线程从 ThreadLocalMap 获取 value。值得注意的是, Thr...

2019-01-29 17:45:20 302

原创 Java 类加载器(二)——线程上下文类加载器

简述线程上下文类加载器(context class loader)是从JDK 1.2开始引入的。类 java.lang.Thread中的方法getContextClassLoader()和setContextClassLoader(ClassLoader cl)用来获取和设置线程的上下文类加载器。如果没有通过 setContextClassLoader(ClassLoader cl)方法进行设置...

2019-01-28 19:25:18 635

原创 Java 类加载器(一)

概念类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类加载器的特性延迟加载JVM 运行并不是一次性加载所需要的全部类的,它是按需加载,也就是延迟加载。程序在运行的过程中会逐渐遇到很多不认识的新类,这时候就会调用 ClassLoader 来加载这些类。加载完成...

2019-01-28 19:22:30 350

原创 Spring 注解配置Bean的加载

在Spring项目中,Bean的配置有的用注解和XML配置。像数据源这种需要配置的Bean我们通常会使用XML配置,像控制层之类只需要初始化不需要配置的Bean我们通常通过注解配置。下面我们通过源码类看一下这些注解类是怎样注册到Map<String, BeanDefinition> beanDefinitionMap中的。常用的注解:注解含义@Controlle...

2019-01-02 10:14:05 1155

原创 Spring Boot的自动化配置解析

Spring自动配置Spring Boot会根据类路径中的jar包、类,为jar包里的类自动配置,这样可以极大的减少配置的数量。简单点说就是它会根据定义在classpath下的类,自动的给你生成一些Bean,并加载到Spring的Context中。自动配置充分的利用了spring 4.0的条件化配置特性,能够自动配置特定的Spring bean,用来启动某项特性。条件注解@Condition...

2018-12-13 16:02:05 716

原创 BeanFactory和FactoryBean的区别

BeanFactory简介BeanFactory是Spring容器的Root Interface,提供了 IOC 容器最基本的功能。 BeanFactory只是一个接口,没有具体的实现,但是它的实现类如XmlBeanFactory,ApplicationContext在其基础之上附加了其他的功能。源码public interface BeanFactory { ...

2018-04-12 17:30:07 279

原创 Sring源码分析——AOP

一、 spring AOP的概念1、Spring AOP中的几个基本概念:切面(Aspect):切面就是一个关注点的模块化,如事务管理、日志管理、权限管理等;连接点(Joinpoint):程序执行时的某个特定的点,在Spring中就是一个方法的执行;通知(Advice):通知就是在切面的某个连接点上执行的操作,也就是事务管理、日志管理等;切入点(Pointcut):切入点就是描述某...

2018-04-12 17:21:55 302

原创 SpringMvc参数解析器源码分析(四)—消息转换器HttpMessageConverter

概述在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制,就是Spring3.x中新引入的HttpMessageConverter即消息转换器机制。源码HttpMessageConverter接口public interface HttpMessageCon...

2018-04-09 14:22:04 771

原创 SpringMvc参数解析器源码分析(三)—数据类型转换

SpringMvc 参数解析的过程中需要进行数据类型的转换,如String变int,date变Long……,在类型转换的过程中还需要对数据的格式进行校验。Java中的属性编辑器PropertyEditorPropertyEditor是属性编辑器的接口,它规定了将外部设置值转换为内部JavaBean属性值的转换接口方法。public interface Property...

2018-04-08 13:27:52 626

原创 SpringMVC参数解析器源码分析(二)--HandlerMethodArgumentResolver

HandlerMethodArgumentResolverComposite简介HandlerMethodArgumentResolverComposite组装了所有的参数解析器的链表,保存了springMVC提供的所有的参数解析器以及自定义的参数解析器,采用职责链的模式来完成参数解析器的查找,并完成参数解析生成目标对象。源码分析public class HandlerMe...

2018-04-08 13:21:17 546

原创 SpringMVC参数解析器源码分析(一)--HandlerMethodArgumentResolver

简介HandlerMethodArgumentResolver是用来为处理器解析参数的,主要用在HandlerMethod中,每个Resolver对应一种类型的参数,其实现类如下图: 源码HandlerMethodArgumentResolver接口public interface HandlerMethodArgumentResolver { //判断...

2018-04-08 13:20:24 310

原创 Spring Filter过滤器和Intercpetor拦截器

过滤器和拦截器的区别Spring开发中我们会遇到Filter过滤器与Interceptor拦截器的使用,他们都能对一些请求做一下预处理,但他们之间还是有很大的不同的:拦截器是基于Java的反射机制的,而过滤器是基于函数回调。Filter是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的。Filter在只在Servle...

2018-04-03 14:20:04 648

原创 Spring 数据库组件之JDBC

java操作数据库的基本步骤如下:建立数据库连接创建Statement或者PreparedStatement执行sql,返回ResultSet关闭ResultSet关闭Statement关闭ConnectionSpring JDBC在Spring JDBC中,JdbcTemplate是一个主要的模板类,继承关系如图JdbcAccessor对DataSourc...

2018-04-02 17:25:53 452

原创 Spring-Bean作用域scope详解

概述Bean的作用域:什么是作用域呢?即“scope”,在面向对象程序设计中一般指对象或变量之间的可见范围。而在Spring容器中是指其创建的Bean对象相对于其他Bean对象的请求可见范围。Spring支持以下作用域:基本作用域:singleton、prototypeweb作用域 :request、session、global session自定义作用域详析...

2018-04-02 16:22:16 973

原创 SpringMvc 限流之 RateLimiter

概念限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理常用限流算法常用的限流算法有两种:漏桶算法和令牌桶算法漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。 对于很多应用场景来说,除了要求能

2018-02-02 11:13:44 4031

原创 JAVA并发编程之——定时线程池

在JAVA并发编程之线程池的最后我们讲到了创建定时线程池,其实线程池的创建仍旧是使用的ThreadPoolExcutor的构造函数,具体代码如下:public ScheduledThreadPoolExecutor(int corePoolSize) { super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new

2017-10-10 19:41:42 3591

原创 JAVA并发编程之——线程池

Executor接口public interface Executor { void execute(Runnable command);}Executor提供了操作Runnable的接口,我们可以直接执行Runnable的方法,也可以创建Thread来执行Runnable,也可以根据实际情况把Runnable放入队列中按顺序执行。ExecutorService接口public inter

2017-10-10 19:39:00 452

原创 JAVA并发编程之——AQS

概述AQS,AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等)。AQS内部包含一个FIFO的同步等待队列,简单的说,没有成功获锁的线程会在这个队列中等待,这个队列是一个双向链表。在基于AQS构建的同步器中,只能在一个时刻发生阻塞,从而降低上下文切换

2017-10-10 19:32:55 375

原创 JAVA并发编程之——CAS

锁的劣势锁机制存在以下问题: - 在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 - 一个线程持有锁会导致其它所有需要此锁的线程挂起。在挂起和恢复线程等过程中存在着很大的开销,并且通常存在着较长时间的中断。 - 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile变量是一种更轻量级的同步机制(使用这些变量时不会发生上

2017-10-10 19:30:45 296

转载 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to fin

注意:本文出自“阿飞”的博客 ,如果要转载本文章,请与作者联系!并注明来源: http://blog.csdn.net/faye0412/article/details/6883879这两天在twitter服务器上忽然遇到这样的异常:e: sun.security.validator.ValidatorException: PKIX path build

2017-04-13 17:29:16 9138

原创 JDK的动态代理

JDK的动态代理,使用最经典的应该是spring AOP,默认情况下,Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对于类的代理使用CGLIB来实现(具体可看Spring AOP的实现). 通过JDK的动态代理,可以为任意的JAVA对象创建代理对象.下面我们看一个简单的demo://被代理的对象,也就是目标对象public interface ProxyServic

2017-01-20 19:08:48 352

转载 linux中强大且常用命令:find、grep

转载于:http://www.cnblogs.com/skynet/archive/2010/12/25/1916873.html在linux下面工作,有些命令能够大大提高效率。本文就向大家介绍find、grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们。本文结构如下:find命令find命令的一般形式find命令的常用选项及实例find与

2017-01-17 17:52:19 342

原创 java.security.ProviderException: java.security.KeyException

在centos6.5上使用openjdk8 用https请求Ping++支付:com.pingplusplus.exception.APIConnectionException: IOException during API request to Pingpp (https://api.pingxx.com): java.security.ProviderException: java

2017-01-13 15:36:45 1120

原创 Spring项目打包部署( Maven Assembly插件)

一、Maven Assembly插件 打包为了在服务器上部署项目,需要将代码打包,其目录结构如下: /bin 执行启动或停止的脚本 /conf 配置文件所在 /lib 代以及所依赖的jar包 /webapp 与项目的webapp相同为了能够打包,我们需要使用assembly插件,pom.xml配置如下: <plugin> <artifactId>maven-ass

2016-11-29 22:48:57 2839

原创 设计模式之——观察者模式

一、基本定义      观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自

2016-10-10 22:27:04 397

转载 通过 Hibernate 实现 JPA 对象关系模型之继承映射策略

转载自:http://www.ibm.com/developerworks/cn/java/j-lo-hibernatejpa/    Java 是一种面向对象的语言,面向对象的语言特的性之一就是继承。而关系型数据库中的表与表之间的关系,并没有这种继承关系,不能说一张表继承另一张表,它们之间的关系只是关联关系。那么现在 JPA 要将 POJO 的 Java 类映射到数据库中,对

2016-09-21 15:07:38 1060

原创 多线程之 Callable Future FutureTask

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程一、Callable Runnable和Callable的区别是: (1)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得 (2)call方法可以抛出异常,run方法不可以 源码如下:/** *

2016-09-14 22:23:22 440

转载 Annotation介绍@interface

Annotation是继承自java.lang.annotation.Annotation的类,用于向程序分析工具或虚拟机提供package class field methed 等方面的信息,它和其他类没什么区别,除了使用方式.      Annotation的一般形式是 :public @interface MyAnnotation { String value() def

2016-09-13 21:20:45 319

原创 zookeeper 数据源动态配置

zookeeper具体实现配置在这里不具体描述,可查看zookeper配置一、实现的方式数据库的连接都会从在数据源datasource,对数据库的连接或者连接池的具体配置都在其中,因此,我们在修改数据库的配置的同时修改datasource 就可以不需要重新启动项目而实现数据库的切换。使用org.apache.commons.dbcp.BasicDataSource 说明:这是一种推荐说明的数据源

2016-08-27 16:51:34 4390

原创 Zookeeper配置管理

一、简介Zookeeper 从设计模式角度来看,是一个基于观察者模式设计的分布 式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/Slave 管理模式二、配置管理(Configuration Management)配置文件

2016-08-27 16:30:04 2305

原创 Jetty 启动spring项目

一、简介  传统的Web开发大部分是开发好web程序,通过打成war等程序包发布到web容器中部署。Jetty其实也可以像tomcat那样作为容器,将程序打包放在其中进行启动,但是我们这里主要是为了简化开发的操作,直接嵌入jetty 启动项目。二、开发环境 1、由于分布式的兴起,代码复用变得很重要,我这边会把Jetty启动项目的代码做一个module,最后打包成jar包,方

2016-08-27 11:54:59 6854

原创 多线程(一)

一、进程和线程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程

2016-06-03 21:46:53 310

转载 QuartZ Cron表达式

CronTriggerCronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表。CronTrigger,你可以指定触发的时间表如“每星期五中午”,或“每个工作日9:30时”,甚至“每5分钟一班9:00和10:00逢星期一上午,星期三星期五“。即便如此,SimpleTrigger

2016-05-31 10:07:54 301

转载 让Jackson JSON生成的数据包含的中文以unicode方式编码

本文出处:http://blog.csdn.net/chaijunkun/article/details/8257209,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。在年初的时候,我曾经写过一篇文章介绍非关系型数据库MongoDB和Jackson JSON框架相结合实现接口敏捷开发的文章(http://blog.csdn.net/ch

2016-05-30 16:50:56 2260

原创 nginx

一、nginx的基本配置 gzip压缩 缓存 负载等使用

2016-05-27 20:27:28 794

原创 设计模式之代理模式

一、定义代理模式(Proxy),为其它对象提供一种代理以控制对这个对象的访问。UML图二、静态代理//声明了目标对象和代理对象的共同接口,这样一来在任何可以//使用目标对象的地方都可以使用代理对象。public interface Interface { void doSomething(); void somethingElse(String arg);}//定义了代理对象所

2016-05-12 21:48:01 350

原创 linux 中 too many open files

服务器中出现“too many open files”的错误主要有两个:1、可能是打开的文件或是socket没有正常关闭。 为了定位问题是否由Java进程引起,通过Java进程号查看当前进程占用文件描述符情况: lsof -i:port 查看你程序使用端口的PID lsof -p pid每个文件描述符的具体属性 lsof -p pid | wc -l 查看某一进程的打开文件数量

2016-05-12 10:07:49 488

转载 如何解决“Offending key in ~/.ssh/known_hosts” file

如何解决“Offending key in ~/.ssh/known_hosts” file

2016-04-26 16:52:32 5207

原创 Java源码之String

String为什么不可变

2016-04-26 15:47:13 512 2

转载 mysql 汉字转成拼音

mysql 汉字转成拼音 全拼、首字母拼音

2016-04-26 09:35:13 3856

面向对象之设计模式PPT

山大面向对象课程设计模式部分的课件,详细的讲了设计模式以及设计原则

2016-04-24

hibernate实战第二版

Hibernate之父亲自执笔 无可替代的Hibernate和ORM技术圣经 职业Java程序员必备秘籍

2014-09-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除