- 博客(162)
- 资源 (26)
- 收藏
- 关注
原创 SpringMVC之分析HandlerMethodReturnValueHandler(一)
我们在用SpringMVC做web开发的时候,有时候处理完一个请求之后会返回一个页面,有时候会返回一个字符串,有时候会返回一个json对象。通过分析源码我们知道在调用请求处理器映射方法的时候走的是同一段代码,如下:org.springframework.web.method.support.InvocableHandlerMethod#doInvoke protected Object
2017-11-07 21:46:47
2712
原创 SpringMVC之分析AnnotationDrivenBeanDefinitionParser(三)
我们在之前的文章中对这篇文章中AnnotationDrivenBeanDefinitionParser的parse方法进行了一些分析,我们在这篇文章中接着分析AnnotationDrivenBeanDefinitionParser的parse方法的内容。ManagedList messageConverters = getMessageConverters(element, source, p
2017-11-03 22:18:29
891
原创 SpringMVC之分析AnnotationDrivenBeanDefinitionParser(二)
在上一篇文章中我们简单的分析了一下AnnotationDrivenBeanDefinitionParser,在这一篇的文章中我们继续分析AnnotationDrivenBeanDefinitionParser的内容。AnnotationDrivenBeanDefinitionParser这个类最最重要的一个方法就是parse方法。在这篇文章中我们简单的分析一下parse方法的内容。先看parse中
2017-10-31 22:11:55
960
原创 使用Servlet3.0新特性进行web开发小demo
在上一篇文章中我们使用了SpringMVC结合Servlet3.0的新特性进行web开发。在这一篇文章中我们用最原始的Servlet的方式来进行一个简单的web开发的工作。在我们之前的web开发中我们会在web.xml中进行Servlet、Filter、初始化参数等信息的配置。在Servlet3.0中为我们提供了一个接口:javax.servlet.ServletContainerInitiali
2017-10-30 22:36:27
3247
原创 SpringMVC之全注解方式进行web开发
在我们之前进行web开发的时候,通常都会有一个web.xml存在,我们会在web.xml里面配置Servlet、Filter等一些web开发相关的东西。但是由于Servlet3.0的规范和Spring3.1功能的增强,现在我们在进行web开发的时候可以不用再使用web.xml了,转而全部使用java注解就可以了。下面是一个例子:首先我们先创建一个StrartWebApplicationInit
2017-10-29 22:40:32
3772
原创 SpringMVC之分析AnnotationDrivenBeanDefinitionParser(一)
首先我们会想一下,我们在进行SpringMVC配置的时候是怎样配置的(不是web.xml)?我们会在SpringMVC的配置文件中添加这样的一些东西:xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/m
2017-10-28 17:16:00
2969
2
原创 SpringMVC之分析RequestMappingHandlerAdapter(二)
接上篇文章,我们在这一篇文章中继续对RequestMappingHandlerAdapter这个类进行分析。在上篇文章中我们说到afterPropertiesSet这个方法中添加的一些MethodHandlerResolver,我们继续分析这个方法中的其他代码: if (this.initBinderArgumentResolvers == null) { List resolvers
2017-10-28 16:33:47
2365
原创 SpringMVC之分析RequestMappingHandlerAdapter(一)
RequestMappingHandlerAdapter请求映射处理适配器,在SpringMVC中它是一个非常重要的类,对请求处理方法的调用主要是通过这个类来完成的(这段代码mv = ha.handle(processedRequest, response, mappedHandler.getHandler());)。下面我们就简单的分析一下这个类。首先我们先看一下它的UML类图结构:
2017-10-24 23:27:10
17077
原创 SpringMVC之分析HandlerMethodArgumentResolver请求对应处理器方法参数的解析过程(二)
在上一篇文章中我们分析了SpringMVC对简单对象和@RequestParam注解的解析过程,这一章中我们继续分析其他形式的参数解析过程。ServletRequestMethodArgumentResolver下面来看一下我们的第一个请求:http://localhost:8086/allRequestFormat/requestAndResponseRequest?userName=z
2017-10-17 21:38:03
3947
原创 SpringMVC之分析HandlerMethodArgumentResolver请求对应处理器方法参数的解析过程(一)
在我们做Web开发的时候,会提交各种数据格式的请求,而我们的后台也会有相应的参数处理方式。SpringMVC就为我们提供了一系列的参数解析器,不管你是要获取Cookie中的值,Header中的值,JSON格式的数据,URI中的值。下面我们分析几个SpringMVC为我们提供的参数解析器。在SpringMVC中为我们定义了一个参数解析的顶级父类:HandlerMethodArgumentReso
2017-10-15 13:12:10
8349
2
原创 小工具类输出ThreadLocal中的值
一个输出ThreadLocal中的值小工具类,代码如下:package com.zkn.utils;import org.springframework.core.NamedThreadLocal;import java.lang.ref.Reference;import java.lang.reflect.Field;import java.util.*;/** * Cre
2017-10-04 20:02:08
2215
原创 查看JDK动态代理生成的类的内容
首先我们先定义一个接口:public interface PersonInter { String test(String str);}接着就是我们想的要生成的JDK代理类源码的代码:public class JdkProxySourceClass { public static void writeClassToDisk(String path){ byte[] c
2017-09-10 00:37:42
7368
原创 SpringMVC之自动注入Request对象
前几天看了领导写的一段代码,在Controller中注入了HttpServletRequest,形式如下所示:@RestControllerpublic class AutowiredRequestController { @Autowired private HttpServletRequest request;}当时看到了这一段代码,首先想到的是AutowiredRe
2017-09-10 00:07:33
23044
7
原创 SpringBoot之开启Profile
我们在做项目开发的时候,生产环境和测试环境的一些配置可能会不一样,有时候一些功能也可能会不一样,所以我们可能会在上线的时候手工修改这些配置信息。但是Spring中为我们提供了Profile这个功能。我们只需要在启动的时候添加一个虚拟机参数,激活自己环境所要用的Profile就可以了。下面举个例子来说明一下:首先我们先创建一个bean,用来测试是不是从不同的配置文件中取的值。代码如下(省略get
2017-09-09 19:03:49
26428
1
原创 SpringMVC之请求处理源码分析从service到doDispatch之doDispatch分析(二)
说明:本文所用的SpringMVC版本为4.3.4.RELEASE,应用服务器为TomCat8.0.33。在上一篇文章中我们分析了请求service方法到doDispatch的一部分,今天我们先简单的分析doDispatch这个方法,以后还会有很多围绕着这个方法进行分析的内容。首先我们先看一下这个方法的源码的内容: protected void doDispatch(HttpServl
2017-08-12 21:57:42
2834
原创 自定义简陋版SpringMVC
这几天在家写了一个简陋版的SpringMVC,先把代码贴出来,有兴趣的同学可以看一下。首先定义了一个简陋的服务器,其实也就是用了ServerSocket写了一个服务端(更详细的点看这里:创建一个简单的web服务器):public class HttpServer { public static void main(String[] args) { await()
2017-08-12 19:08:43
1049
原创 SpringMVC之请求处理源码分析从service到doDispatch(一)
前面几篇文章我们简单的分析了一下SpringMVC初始化的过程,接下来的这几篇文章我们从源码的角度分析一下SpringMVC对请求的处理过程。这一篇文章我们来分析请求从service到DispatcherServlet的doDispatch的过程。我们做web开发的同学大都对Servlet的生命周期比较了解,对Servlet规范也有一些了解。我们知道请求在被Servlet处理之前会先被过滤器处理,
2017-07-16 11:07:43
3528
原创 SpringMVC之浅析上下文初始化(二)
在上一篇文章中(点这里查看)我们说了ContextLoaderListener初始化Web上下文的过程,这篇文章中我们说一下DispatcherServlet初始化上下文的过程。
2017-07-01 23:42:25
2120
原创 SpringMVC之浅析上下文初始化(一)
说明:本文所用的SpringMVC版本为4.3.4.RELEASE,应用服务器为TomCat8.0.33。下面我们先回顾一下我们在用SpringMVC进行开发时在web.xml中进行的一些配置: contextConfigLocation classpath:applicationContext.xml
2017-06-11 21:08:40
3941
原创 Java内存模型小析之重排序(三)
我们在上一篇文章中说了JAVA内存模型中原子性可见性的相关概念(点这里查看),我们在这一篇文章里说一下java内存模型中的重排序的内容。重排序重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。也就是说重排序的目的是提高程序的执行性能。重排序的分类编译器优化的重排序编译器在不改变单线程程序执行结果的前提下,可以重新安排语句的执行顺序。这里需要注意的是:不
2017-06-11 17:33:35
990
原创 SpringMVC之浅析组件初始化过程
在上篇的文章中简单的说了一下SpringMVC请求大致处理的过程(点这里查看),说了一下SpringMVC为我们提供好的一些相关的组件。在这篇文章中我们接着看一下SpringMVC初始化这些组件的过程。SpringMVC默认组件在spring-webmvc.jar的中有一个org/springframework/web/servlet/DispatcherServlet.propertie
2017-06-02 23:29:47
2330
原创 使用HttpClient发送InputStream对象及发送文件
最近在做的东西中有这样一个需求要把一个文件上传到服务器A上,再由服务器A上传到服务器B上,而服务器A上传到服务器B的这个请求是通过HttpClient发送的。如果是发送文件的话很好办,但是现在问题的难点是服务器A通过HttpClient发送的不是一个文件,而是一个InputStream对象。一个折中的办法是先把文件临时存储在服务器A上,然后再从服务器A上读取文件发送到服务器B上,那么有没有办法直接
2017-05-26 00:17:03
32110
4
原创 SpringBoot实现文件上传下载的功能
SpringBoot我们大多数的时候是当做服务提供者来使用的,但是在一些场景中还是要用到一些文件上传下载这种"非常规"操作的。那么怎么在SpringBoot中实现文件的上传下载功能呢?想象一些我们在SpringMVC中是怎么做的。我们需要在SpringMVC的配置文件中增加文件上传的Bean的配置,如下:然后在后台对应的处理方法中就可以直接获取到文件的输入流了。而对于SpringBoot来说,
2017-05-23 01:00:12
31088
10
原创 SpringMVC请求大致处理流程
我们都在使用SpringMVC,那么SpringMVC处理一个请求的大致流程是怎样的呢?请看下面图所示:文字描述的话大致是这样的一个流程:用户首先发送请求到前端控制器(DispatcherServlet),在doDispatch这个方法中会为请求找到对应的HandlerMapping(处理器映射),然后将这个HandlerMapping映射成HandlerExecutionChai
2017-05-21 23:50:09
7524
1
原创 Spring Bean的生命周期小析(二)
在上一篇文章中我们说了BeanFactory中Bean的生命周期(点击这里查看),在这一篇文章中我们说一下ApplicationContex中Bean的生命周期。ApplicationContext中Bean的生命周期和在BeanFactory中的生命周期大致相同,不同的是多了一个BeanFactoryPostProcessor的接口和ApplicationContextAware接口(这个接口会
2017-05-21 18:39:52
1468
原创 Spring Bean的生命周期小析(一)
在上一篇(点击这里观看上一篇)中我们用的BeanPostProcessor、@PostConstruct、InitializingBean等都属于Spring Bean生命周期的内容。在这篇文章中我们简单的说一下Bean的生命周期有关的内容。在Spring中,我们可以从两个层面定义Bean的生命周期:第一个层面是Bean的作用范围(Singleton、Prototype以及Web中的Request
2017-05-21 12:02:15
3222
原创 Spring AOP中自我调用的问题
前几天在做项目的时候同事说,在使用AOP进行拦截的时候发现有些方法有时候能输出拦截的日志有时候不输出拦截的日志。发现在单独调用这些方法的时候是有日志输出,在被同一个类中的方法调用的时候没有日志输出。我记得之前看过一篇文章是讲Spring事务自我调用不起作用的问题,应该是同样的问题(如果要观看那篇文章请点击这里http://jinnianshilongnian.iteye.com/blog/1487...
2017-05-21 00:20:52
6125
1
原创 小程序来测试加载的是哪个jar中的类
在我们日常开发中可能经常会遇到jar冲突的问题,特别是在使用Maven进行项目管理的时候。在这里参考别人的文章写了一个用来测试class是从哪个jar中加载的demo(参考自:http://stamen.iteye.com/blog/2314940)。demo如下:package com.zkn.spring.miscellaneous.controller;import java.io.
2017-05-20 20:06:27
856
原创 Spring学习之资源管理器(Resource)
今天开始Spring学习(希望发展的是Spring的源码学习的系列)的第一章。我们在用Spring做开发的时候,总免不了读取各种各样的资源文件,比如说Spring的xml配置文件、属性的配置文件properties文件等。这些资源文件可能在classPath下面、web容器的上下文中、网络上等等。虽然JDK将不同来源的资源抽象成URL,通过注册不同的handler(URLStreamHandler
2017-05-18 13:33:58
2926
原创 Java对象创建、分配、布局、访问小析(HotSpot虚拟机)(三)
本文内容总结自周志明先生所编著的《深入理解Java虚拟机-JVM高级特性与最佳实践》此书的经典不必多说。本节内容是对象的定位访问。在java中我们无时无刻不在创建对象,我们创建对象的目的当然是为了使用它了。但是我们怎么才能使用操作创建的对象呢?我们的java程序会通过栈上的reference数据(指向对象的引用)来操作堆上的具体对象。那这个对象的引用是通过什么方式去定位、访问堆中的对象的具体位
2017-05-10 00:44:03
780
原创 Java对象创建、分配、布局、访问小析(HotSpot虚拟机)(二)
本文内容总结自周志明先生所编著的《深入理解Java虚拟机-JVM高级特性与最佳实践》此书的经典不必多说。本节内容是对象的内存布局。在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头、实例数据、对齐填充(Padding)。对象头包含两部分的信息,一部分是对象自身的运行时数据,包含哈希码、GC分代年龄、锁状态信息、线程持有的锁、偏向线程ID、偏向时间戳等。另一部分的信息是类型
2017-05-09 01:04:23
738
原创 Java对象创建、分配、布局、访问小析(HotSpot虚拟机)(一)
本文内容总结自周志明先生所编著的《深入理解Java虚拟机-JVM高级特性与最佳实践》此书的经典不必多说。本节内容是对象的创建.、分配的内容。对象的创建java对象的创建有几种方式呢(这里所说的java对象仅限于普通java对象不包含数据和Class对象)?大致有以下四种方式:new关键字。这应该是我们最常见和最常用最简单的创建对象的方式。使用newInstance方法。这里包括
2017-05-09 00:35:31
860
原创 TomCat之Filter小析
对于做过web开发的人来说,Servlet中的过滤器肯定都不会陌生。这里我尝试着分析一下TomCat服务器中对于Filter是怎么组装的。在这之前,先把主要的几个类列一下:Filter 过滤器接口FilterChain 过滤器链FilterConfig 过滤器的配置FilterDef 过滤器的配置和描述ApplicationFilterChain 调用过滤器链App
2017-05-07 23:46:21
1918
原创 Java内存模型小析值JVM运行时数据区域(一)
之前看过一次周志明写的《深入理解Java虚拟机-JVM高级特性与最佳实践》但是看过之后很多东西就忘了如同失忆了一般,所以这次在看的时候做一个读书笔记,以后也便于复习。先奉上一副自己总结的小图:
2017-05-07 00:50:38
1120
原创 自定义JDBC数据库连接池小例子
上篇文章中写了一个JDBC的小例子,这篇文章写个数据库连接池的小例子吧。package com.zkn.newlearn.jdbc.mysql.third;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;imp
2017-05-04 00:17:54
2435
原创 JDBC连接MySQL数据库小例子
前几天没事翻看了一下JDBC,顺便写了一个小demo。demo代码如下:package com.zkn.newlearn.jdbc.mysql.first;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.sql.*;import java.util.Pr
2017-05-03 22:51:53
632
原创 为自定义对象生成随机属性值
这几天在熟悉Swagger的时候,发现它没有提供为自定义对象属性赋随机值的功能(如果有的话,请告知一下),于是自己就写了一个能生成对象随机属性值的工具类,主要用到了反射机制、注解、随机类。具体的代码如下所示:随机生成对象属性值的类:public class RandomObjectValue { public static T getObject(Class clazz)
2017-04-16 20:43:10
2796
原创 为你的 项目安装Sql跟踪工具-P6Spy
我们在项目中有时候需要跟踪记录sql的执行情况,有时候跟踪的日志中的sql是预编译之后的,参数是带问号的,所以我们需要跟踪到真正的sql执行语句,P6spy正好可以满足我们的需要。先来看一下P6Spy的介绍:P6Spy 是针对数据库访问操作的动态监测框架(为开源项目,项目首页:www.p6spy.com)它使得数据库数据可无缝截取和操纵,而不必对现有应用程序的代码作任何修改。P6Spy分发包包
2017-04-04 16:20:28
3615
2
原创 SpringMVC解析JSON请求数据小析
这几年都在搞前后端分离、RESTful风格,我们项目中也在这样用。前几天有人遇到了解析JSON格式的请求数据的问题,然后说了一下解析的方式,今天就写篇文章简单的分析一下后台对于JSON格式请求数据是怎么解析的。先把例子的代码贴出来:前端 function testJSON() { $.ajax({ type: "POST",
2017-04-02 16:29:21
11049
Java程序员修炼之道
2016-12-19
spring-framework-4.3.10.RELEASE
2017-08-31
Netty权威指南第2版.
2017-10-17
dubbo-admin-2.5.4
2016-09-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅