自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 Guava-Retrying实现重试机制

在接口调用中由于各种原因,可能会重置失败的任务,使用Guava-Retrying可以方便的实现重试功能。首先,需要引用Guava-Retrying的包 <dependency> <groupId>com.github.rholder</groupId> <artifactId>guava-retrying</artifactId&...

2018-06-28 23:34:10 5913 1

原创 switchhosts 一款host管理工具

SwitchHosts!是一款现代且流畅运行的基于Electron的应用程序,可帮助您编辑,管理和创建自定义host文件,并以最少的工作量连接至在线host源。官网下载压缩包后,解压并以管理员身份执行SwitchHosts!.exe程序。可以切换语言为中文:File - Preferences - Set and Relaunch新建可以添加Hosts规则本地直接录入Hosts方案名,如test可...

2018-06-27 23:28:56 7409

原创 流量拦截控制

本文分享一下如何实现流量拦截首先,流量拦截是要在某一段时间内控制访问次数,如果访问次数超过阈值,则拒绝访问。所以,要有两个配置化信息,一个是流量监控缓存失效时间内可以调用的次数,一个是流量监控缓存失效时间实现方式是使用Redis缓存记录调用次数和拦截器用来拦截http请求调用。@Servicepublic class RateLimitInterceptor extends HandlerInt...

2018-06-21 10:23:49 2544

原创 mybatis入门介绍以及源码分析

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。从 XML 中构建 SqlSessionFa...

2018-06-19 13:09:35 176

翻译 Spring MVC 视图的呈现

前面讲解到DispatcherServlet的doDispatch过程,对视图的呈现处理是在processDispatchResult方法中完成的 private void processDispatchResult(HttpServletRequest request, HttpServletResponse response, @Nullable HandlerExecutionChai...

2018-06-18 15:28:39 314

翻译 MVC处理HTTP分发请求

本节一起学习MVC处理HTTP分发请求

2018-06-18 14:52:12 1279

翻译 DispatcherServlet的启动和初始化

本节一起学习DispatcherServlet的启动和初始化前面已经分析了Spring MVC的工作,下面就DispatcherServlet的启动和初始化进行详细的分析作为Servlet,DispatcherServlet的启动和Servlet的启动过程是相关联的,在Servlet的初始化过程中,Servlet的init会被调用,进行初始化。下面看一下DispatcherServlet的基类Ht...

2018-06-17 12:56:04 888

翻译 Spring MVC设计概览

Spring的上下文体系通过ContextLoader和DispatcherServlet建立并初始化的过程。在完成对ContextLoaderListener的初始化之后,Web容器开始初始化DispatcherServlet,这个初始化的启动与在web.xml中载入次序的定义有关。DispatcherServlet会建立自己的上下文来持有Spring MVC的Bean对象,在建立自己持有的IO...

2018-06-17 12:16:03 171

翻译 IOC容器启动的基本过程

本节一起学习IOC容器的启动过程IOC容器的启动过程就是建立上下文的过程。该上下文是与ServletContext相伴而生的,同时也是IOC容器在web环境中的具体表现之一。由ContextLoaderListener启动的上下文为跟上下文。在根上下文的基础上,还有一个与Web MVC 相关的上下文用来保存控制器DispatcherServlet需要的MVC对象。在web容器中启动Spring 应...

2018-06-16 22:39:02 2387

翻译 Spring AOP拦截器调用的实现

本节一起学习Spring AOP拦截器调用的实现在Spring AOP通过JDK的代理方式或者CGLIB方式生成代理对象的时候,相关的拦截器已经配置到代理对象中了,拦截器在代理对象中起作用是通过对这些方法的回调完成的。如果是JDK的Proxy生成代理对象,那么需要通过InvocationHandler来设置拦截器回调,如果是使用CGLIB,则通过DynamicAdvisedInterceptor完...

2018-06-15 18:31:07 1102

翻译 建立AopProxy代理对象

本节学习建立AopProxy代理对象在Spring的AOP模块中,一个主要的部分就是代理对象的生成,而对于Spring的应用,可以看到,是通过配置和调用Spring的ProxyFactoryBean来完成这个任务的。在ProxyFactoryBean中,封装了主要代理对象的生成过程。在这个生成过程中,可以使用JDk的Proxy和CGLIB两种生成方式。ProxyConfig提供了配置属性;Advi...

2018-06-15 15:29:58 295

翻译 Spring AOP的设计与实现

本节一起学习Spring AOP的设计与实现具体来说,在Spring AOP实现中,使用的核心技术是动态代理,而这种动态代理实际上是JDK的一个特性。通过JDK的动态代理特性,可以为任意JAVA对象创建代理对象,具体使用时通过java Reflection API来完成的。Spring AOP的核心结束是JDK动态代理技术。以动态代理技术设计出了一系列AOP的横切实现,比如前置通知、返回通知、异常...

2018-06-15 11:59:37 184

翻译 Spring AOP概述

本节回顾一下AOP的概念AOP是面向切面的编程思想,百科的概述为:Aspect是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点。从关注点中分离出横切关注点是面向切面的程序设计的核心概念。分离关注点是解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码不再含有针对特定领域问题代码的调用,业务逻辑同特定领域问题的关系通过切面来封装、维护,这样原本分散在整个应用程序的变动就可以很好...

2018-06-15 11:45:04 145

翻译 Bean对IOC容器的感知

本节主要学习Bean对IOC容器的感知容器管理的Bean一般不需要了解容器的状态和直接使用容器,但在某些情况下,需要在Bean中直接对IOC容器进行操作,这时候就需要在Bean中设定对容器的感知。Spring IOC容器也提供了该功能,它是通过特定的aware接口完成的。aware接口有以下这些:BeanNameAware ,可以在Bean中得到它在IOC容器中的Bean实例名称BeanFacto...

2018-06-13 18:47:04 161

翻译 ApplicationContext和Bean的初始化和销毁

本节来学习ApplicationContext和Bean的初始化和销毁首先看一下ApplicationContext容器的初始化和销毁关闭过程。ApplicationContext启动的过程是在AbstractApplicationContext实现的。在使用应用上下文时需要做一些准备工作,这些准备工作在prepareBeanFactory方法中实现。这个方法为容器配置了ClassLoader、P...

2018-06-13 13:10:32 4318

翻译 IOC容器的依赖注入

本节来学习IOC容器的依赖注入假设IOC容器已经载入了用户定义的Bean信息,开始分析依赖注入的原理。首先,依赖注入的过程是用户第一次向IOC容器索要Bean时触发的,当然也可以在BeanDefinition信息中通过控制lazy-init属性来让容器完成对Bean的预实例化。下面从DefaultListableBeanFactory的基类AbstractBeanFactory入手看一下getBe...

2018-06-13 11:47:13 188

翻译 IOC容器的初始化过程

本节来学习IOC容器的初始化过程IOC容器的初始化由refresh()方法启动的,具体包含BeanDefinition的Resource定位、载入和注册三个过程。第一个过程是Resource定位过程。Resource定位指的是BeanDefinition的资源定位,由ResourceLoader通过统一的Resource接口来完成。第二个过程是BeanDefinition的载入。这个载入过程是把用...

2018-06-11 21:38:33 420

翻译 IOC容器的设计

IOC容器的设计UML:从接口BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,是一条主要的beanFactory的设计路径。其中,BeanFactory接口定义了基本的IOC容器的规范。在这个接口定义中,包含了getBean()这样的IOC容器的基本方法。而HierarchicalBeanFactory接口继承了BeanF...

2018-06-11 12:28:52 446

原创 Executors线程池源码分析

本节学习Executors类源码首先看一下常用的线程池的几种创建方式 /** * 创建一个线程池,该线程池重用固定数量的线程,在共享的无界队列中运行 */ public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nT...

2018-06-10 17:42:19 187

原创 CountDownLatch源码分析

本节一起学习CountDownLatch类的源码1.类变量信息 private final Sync sync;2.构造函数 public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync ...

2018-06-07 23:04:32 159

原创 CopyOnWriteArrayList源码分析

本节一起学习CopyOnWriteArrayList类的源码1.首先看一下类的定义public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable2.类的变量 /** 重入锁用来保护所有的存取器 */ final ...

2018-06-07 11:15:46 137

原创 ArrayBlockingQueue类源码分析

本节学习ArrayBlockingQueue的源码:1.首先看类的定义public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable可以看到类继承了AbstractQueue且实现了接口Blo...

2018-06-06 23:21:05 125

原创 ReentrantLock源码分析

本节看一下ReentrantLock类的源码1.首先看一下类的定义public class ReentrantLock implements Lock, java.io.SerializableReentrantLock实现了Lock接口2.类的变量信息private final Sync sync;提供了同步机制3.构造函数 /** * Creates an instance o...

2018-06-06 22:21:09 106

原创 AbstractQueuedSynchronizer抽象类源码分析

上面几章节介绍了读写锁和Sync抽象类,这节介绍AQS如何控制同步的1.首先看一下类的定义public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable官方对类的描述为:提供了一个框架实现阻塞锁,依赖于同步器(信号...

2018-06-06 21:00:33 123

原创 读写锁-ReentrantReadWriteLock内部类Sync源码分析

首先看类的定义:abstract static class Sync extends AbstractQueuedSynchronizer    Sync是抽象类,且继承了AbstractQueuedSynchronizer    而AbstractQueuedSynchronizer继承了AbstractOwnableSynchronizer    其中AbstractOwnableSynchr...

2018-06-06 11:55:53 354

原创 读写锁-ReentrantReadWriteLock源码解读

本节一起学习ReentrantReadWriteLock类的源码:1、首先,可以看到ReentrantReadWriteLock类实现了ReadWriteLock接口,public class ReentrantReadWriteLock implements ReadWriteLock, java.io.Serializable读写锁ReadWriteLock接口定义了两个方法:...

2018-06-05 23:39:32 196

原创 原子类-AtomicInteger类源码分析

本节介绍AtomicInteger类源码首先,AtomicInteger类继承了Number抽象类,Integer也继承了Number抽象类。内部维护了一个int数据,且被volatile修饰:private volatile int value;常用的方法:1.getAndSet /** * Atomically sets to the given value and retur...

2018-06-05 22:49:14 247

原创 原子类-AtomicBoolean类源码分析

常见的原子类:基本类: AtomicInteger、AtomicLong、AtomicBoolean;引用类型: AtomicReference、AtomicReference的ABA实例、AtomicStampedRerence、AtomicMarkableReference;数组类型: AtomicIntegerArray、AtomicLongArray、AtomicReferenceArra...

2018-06-05 22:39:55 460

原创 延时任务实现

延时任务举例:订单生成30分钟内没有支付,则作废延时任务实现的几种思路:1.数据库实现方式    思路:任务表增加触发时间字段,当任务插入时,触发时间等于当前时间+30分钟,使用Quartz批处理定时轮询任务,只有到了触发时间的且未支付的订单,才作废。2.使用JDK的DelayQueue无界阻塞队列实现    思路:订单任务要实现Delayed接口,重写compareTo和getDelay方法,生...

2018-06-04 12:04:26 301

原创 mySql学生成绩排名

MySql 实现查询每个班级学习成绩前N的学生首先建一张学生成绩信息表:CREATE TABLE t_student (  stu_id int(11) NOT NULL AUTO_INCREMENT COMMENT '学生ID',  stu_name varchar(50) NOT NULL COMMENT '学生名称',  score decimal(5, 2) NOT NULL COMMEN...

2018-06-03 17:30:11 2873

birt报表api文档

birt报表的api文档

2013-08-30

空空如也

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

TA关注的人

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