自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(162)
  • 资源 (26)
  • 收藏
  • 关注

原创 自定义SpringSecurity授权跳转地址

自定义SpringSecurity授权跳转地址在我们用SpringSecurity+Oauth2做权限验证和访问控制的时候,如果要访问的请求处于未登录状态,会被框架进行拦截,并重定向到一个/login的请求(1),再重定向我们授权服务器的/oauth/authorize请求(这里是使用的授权码模式),接着再重定向到我们授权服务器的/login请求上,即我们授权服务器的登录页面。在工作中遇到了一个要修改(1)这个地方请求的问题。既然要修改(1)的/login请求,我们首先要弄清楚这里的/login是从哪里来

2021-02-26 00:58:12 2757

原创 SpringMVC之RequestMappingHandlerMapping(三)

我们在这篇文章中接着上一篇文章的内容接着说,我们在上一篇文章中说到在doWithMethods这个方法中会调用MethodCallback的doWith方法进行方法处理,那么我们在RequestMappingHandlerMapping中MethodCallback的实现是什么呢? ReflectionUtils.doWithMethods(currentHandlerType, /...

2019-09-04 01:31:25 1372

原创 SpringMVC之RequestMappingHandlerMapping(二)

我们在上篇文章中大致说了一些和RequestMappingHandlerMapping相关的类,我们在这篇文章中重点分析下RequestMappingHandlerMapping这个类。从上篇的文章中我们看到,RequestMappingHandlerMapping这个类实现了和Bean的生命周期相关的一些接口(关于Bean的生命周期可以参考之前写的小文章:Spring Bean的生命周期小析(一...

2019-08-30 01:36:03 1417

原创 SpringMVC之RequestMappingHandlerMapping(一)开篇

这一段时间工作比较忙,自己也变得懒惰了一些,回头看看博客已经有半年多没有更新了。还是要让自己保持一颗不断学习的心的,就以SpringMVC的RequestMappingHandlerMapping的分析作为新的开始吧,本文所用的SpringMVC版本为5.1.5。我们在学习SpringMVC的时候,RequestMappingHandlerMapping和RequestMappingHandler...

2019-07-24 01:04:26 2602

原创 SpringBoot之集成SpringAOP分析(续)

这里我们先对上一篇文章的内容做一个总结,原谅我再次贴一下AopAutoConfiguration 这个类的代码@Configuration@ConditionalOnClass({ EnableAspectJAutoProxy.class, Aspect.class, Advice.class, AnnotatedElement.class })@ConditionalOnPropert...

2018-12-16 22:10:54 673

原创 SpringBoot之集成SpringAOP分析

我们在之前的文章中简单的分析过SpringAOP和Spring的整合过程(Spring系列之Spring框架和SpringAOP集成过程分析(十)),我们在这篇文章中简单的分析一下SpringBoot整个SpringAOP的过程。 如果我们要在SpringBoot中使用SpringAOP我们需要哪些准备步骤呢?就一步:在你的应用中引入SpringBoot提供的aop-starter即可: ...

2018-09-02 23:52:28 1382

原创 踩坑记:根据类型获取Spring容器中的Bean

在项目开发中遇到了这样的一个问题:有同事在BeanFactoryPostProcessor的实现方法中写了类似这样的一段代码:@Componentpublic class BeanFactoryPostProcessorImpl implements BeanFactoryPostProcessor { @Override public void postProcess...

2018-09-01 23:34:12 9621 4

原创 Spring系列之Spring框架和SpringAOP集成过程分析(十二)

在这篇文章中我们接着上一篇的文章说。在上一篇文章中我们提到了getAdvicesAndAdvisorsForBean这个方法,这个方法的内容是为目标对象挑选合适的Advisor类,其源码如下: //targetSource 为null protected Object[] getAdvicesAndAdvisorsForBean(Class<?> beanClass,...

2018-06-25 23:32:47 719 1

原创 Spring系列之Spring框架和SpringAOP集成过程分析(十一)

我们在这篇文章中来分析一下AnnotationAwareAspectJAutoProxyCreator这个类。

2018-06-23 16:07:35 807

原创 Spring系列之Spring框架和SpringAOP集成过程分析(十)

在开始这个系列之前大家先想一下我们是怎么在项目中使用SpringAOP的(这里的分析都是基于AspectJ注解的)。我们需要在我们的Spring配置文件中引入SpringAOP的命名空间和标签,然后定义切面Bean,进行AOP配置。大概如下所示:<?xml version="1.0" encoding="UTF-8"?&am

2018-06-18 16:59:24 1197

原创 Spring系列之AOP分析之对通知方法的执行过程(九)

我们在上一篇文章中说到了前置通知的方法调用AspectJMethodBeforeAdvice#before,在这个before方法中又调用了invokeAdviceMethod这个方法,invokeAdviceMethod这个方法在AspectJMethodBeforeAdvice的父类AbstractAspectJAdvice中。AbstractAspectJAdvice这个是Aspect的所有...

2018-06-18 14:42:41 4107

原创 Spring系列之AOP分析之对目标对象的拦截过程(八)

我们在上一篇文章中简单的说了调用动态代理对象方法的过程,也说了AOP拦截器执行链的生成过程。我们接着说AOP对目标对象的拦截过程。下面的代码是我们要分析的重点://proxy:生成的动态代理对象//target:目标对象//method:目标方法//args:目标方法参数//targetClass:目标类对象//chain: AOP拦截器执行链 是一个MethodInterce...

2018-05-08 23:23:02 7235 1

原创 Spring系列之AOP分析之对目标对象的拦截过程(七)

我们在上一篇文章中简单的说了一下SpringAOP使用JDK动态代理生成目标对象的过程,我们在这一篇文章中说一下SpringAOP对生成的动态代理对象的方法的拦截过程(即SpringAOP拦截过程),这个分析的过程可能会比较长。 在上一篇文章中我们说的使用JDK创建动态代理对象是用的JdkDynamicAopProxy这个类,这个类同时实现了InvocationHandler这个接口,实现了它的...

2018-04-24 22:49:39 1367 1

原创 Spring系列之AOP分析之代理对象的创建(六)

我们在之前的文章中说了Advisor的创建过程,Advice的创建过程以及为目标类挑选合适的Advisor的过程。通过之前的分析我们知道,SpringAOP将切面类中的通知方法都封装成了一个个的Advisor,这样就统一了拦截方法的调用过程。我们在这一篇文章中说一下SpringAOP中代理对象的创建过程。先看下面的一张图: 在SpringAOP中提供了两种创建代理对象的方式,一种是JDK自带...

2018-04-19 23:39:50 4377 1

原创 Spring系列之AOP分析之为目标类挑选合适的Advisor(五)

我们在之前的文章中分析了Advisor的生成过程以及在Advisor中生成Advise的过程。在这一篇文章中我们说一下为目标类挑选合适的Advisor的过程。通过之前的分析我们知道,一个切面类可以生成多个Advisor(多个切面类的话那就更多多的Advisor了),这些Advisor是否都能适用于我们的目标类呢?这就需要通过Advisor中所拥有的Pointcut来进行判断了。先回到我们最开始的例...

2018-03-29 00:05:41 2071

原创 Spring系列之AOP分析之获取Advice的过程(四)

我们在前面的文章中分析了从切面类中获取Advisor的过程,我们最后创建的Advisor实例为:InstantiationModelAwarePointcutAdvisorImpl,它是一个Advisor和PointcutAdvisor的实现类,所以我们可以从这个类中获取Advice和Pointcut。从之前的分析中我们也看到了Pointcut的赋值,在这一篇文章中我们将会具体分析Advice的创...

2018-03-27 23:49:33 1998

原创 Spring系列之AOP分析之获取Advisor的过程续(三)

我们在这一章中继续上一章的分析。我们在上一章中说到了获取到了切面类中所有不带@Pointcut注解的方法,我们看看Spring对我们获取到的这些方法进行了什么操作:for (Method method : getAdvisorMethods(aspectClass)) { //循环切面中所有不带@Pointcut注解的方法。 //method 切面中不带@Pointcut...

2018-03-27 22:59:09 1189

原创 Spring系列之AOP分析之获取Advisor的过程(三)

我们在这篇文章中接着上一篇文章的分析。我们在上一篇文章中分析了创建AspectJProxyFactory,并向AspectJProxyFactory中添加目标对象和获取目标对象的过程。我们在这一篇文章中分析调用addAspect方法添加切面的过程。 在AspectJProxyFactory中有两个addAspect重载方法,一个入参是切面实例对象,一个入参是切面类对象。他们两个的区别是:传入实例...

2018-03-25 22:10:31 3021

原创 Spring系列之AOP分析(二)

终于要正式开始SpringAOP的分析工作了,在这之前先问个问题:关于AOP你认为最重要的是哪几个地方?我觉得有这样几个地方(理解的不对的地方欢迎指出):一个是AOP的配置(拦截规则的配置),一个是代理对象的创建,一个是统一的拦截调用过程。关于AOP的配置Spring是自己定义了一套规则同时集成了AspectJ的语法,抽象为了Pointcut类。代理对象的创建,SpringAOP定义了一个工厂类A...

2018-03-21 23:21:14 1502

原创 Spring系列之AOP分析开篇(一)

在开始Spring的AOP分析之前,先来看一个很老的一个问题。。。假设你在开发的过程中,需要在类A中的方法之前执行一些逻辑(我们称为逻辑A),你可能的一个做法是直接修改类A中的方法,在类A中的方法的开始处写上要添加的代码,你还可能会给类A生成一个代理类,去对调用方法进行拦截,在代理类里面去执行相应的逻辑(逻辑A)。直接修改类A中的方法一般是我们不推荐的方式(存在改动量大、不易扩展等问题),我们通常...

2018-03-18 22:49:36 1405 1

原创 Spring系列之AOP基本主要类概述

在这篇文章中我将对自己了解的AOP中的基本主要类做一个概述,可能不包括一些AOP高级用法的类以及是自己还不了解的类。会不定期的进行补充和修改。SpringAOP基础解析类 类名 作用概述 AopNamespaceHandler AOP命名空间解析类。我们在用AOP的时候,会在Spring配置文件的beans标签中引入:xmlns:aop AspectJAu...

2018-03-18 18:45:41 2386

原创 Spring系列之FactoryBean(二)

我们在上一篇文章中说了一下FactoryBean类型的Bean的getObjectType方法被使用到的一个地方,我们在这一篇文章中会说一下FactoryBean是怎么让Spring容器管理调用它的getObject所生成的Bean的。在这篇文章中我们从getBean方法开始说起(我们这里还是要说一下我们现在的beanName的值为:factoryBeanLearn,Class类型为:Factor...

2018-03-17 00:21:33 3510 3

原创 Spring系列之FactoryBean(一)

在我们的开发工作中应该都见过或使用过FactoryBean这个类,也许你会看成了BeanFactory这个类。FactoryBean和BeanFactory虽然长的很像,但是他们的作用确实完全不像。这里你可以想象一下,你会在什么样的场景下使用FactoryBean这个接口?FactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过...

2018-03-15 23:39:51 90659 37

原创 IDEA使用小技巧

这篇文章用来记录一下自己在使用IDEA中的小技巧,会不断更新。debug小技巧在我们开发过程中,免不了要对源代码进行debug。在debug的过程中可能会遇到这样的一种场景:需要去debug一个循环代码中的一段逻辑,而这个循环又比较多,一个一个的去debug就会很费劲,有没有什么方式可以跳过不想要的循环条件,一步到位直击我们的目标呢?答案是肯定的下面我们来演示一下怎么在IDEA中跳不过不想...

2018-03-11 18:12:04 973

原创 SpringBoot之@EnableConfigurationProperties分析

我们在用SpringBoot进行项目开发的时候,基本上都使用过@ConfigurationProperties这个注解,我们在之前的文章中也说过ConfigurationPropertiesBindingPostProcessor会对标注@ConfigurationProperties注解的Bean进行属性值的配置,但是我们之前没有说ConfigurationPropertiesBindingPo

2018-01-28 00:43:39 119144 20

原创 SpringBoot之浅析TomCat端口号设置

我们在之前的文章中说过怎么去修改TomCat的端口号(SpringBoot修改默认端口号),我们在这篇文章中简单的说一下SpringBoot是怎么实现修改TomCat端口号的。 修改TomCat的端口号大概可以分为这样的两类吧,一种是用配置项的方式,另一种是用程序实现的方式。配置项包含:设置命令行参数、系统参数、虚拟机参数、SpringBoot默认的application.properties(

2018-01-16 23:54:08 21838 4

原创 SpringBoot之浅析配置项解析(五)

在上一篇文章的结尾处我们简单的说了一下PropertiesConfigurationFactory中的bindPropertiesToTarget这个方法的内容,在这个方法中有这样的一段代码: //获取PropertyValues 重点要分析的PropertyValues propertyValues = getPropertySourcesPropertyValues(names,relaxed

2018-01-15 22:25:20 1790

原创 SpringBoot之浅析配置项解析(四)

我们在之前的文章中简单的说了一下SpringBoot对于默认的配置文件的解析过程,在这一篇文章中我们再简单的分析一下SpringBoot是怎么将解析到的配置属性信息设置到相应的Bean上的。既然是用SpringBoot的属性配置方式,那么我们在这里会在对应的类上加上ConfigurationProperties和Component(或是和Component相同功能的)注解。我们定义的Bean如下:@

2018-01-14 19:19:07 2509

原创 SpringBoot之浅析配置项解析(三)

我们接着上一篇的文章继续分析。我们来看这一段代码://在上一篇文章中我们分析了getSearchNames()这个方法,这个方法默认返回 只有一个元素 application的List for (String name : getSearchNames()) { //我们分析的重点 profile 为null load(location, name, profile);

2018-01-10 22:10:52 2794

原创 SpringBoot之浅析配置项解析(二)

我们在上一篇文章中简单的说了一些SpringBoot配置属性相关的一些内容,我们在这篇文章中接着上一篇的文章继续进行分析。我们在上一篇文章中提到了这样一个类:ConfigFileApplicationListener,从类名来看的话这是一个配置文件应用监听器,这个类主要的一个作用是在 refresh context之前解析默认的配置文件。首先我们来看一下它的UML类图: ConfigFile

2018-01-08 22:11:55 930

原创 SpringBoot之浅析配置项解析(一)

在我们的开发工作总是离不了配置项相关的配置工作,SpringBoot也为我们提供了@ConfigurationProperties注解来进行配置项信息的配置工作,同时也提供了几个配置文件的默认加载位置,如:classpath:application.properties、classpath:application.yml、classpath:application.yaml、classpath:/

2018-01-07 15:39:22 3431

原创 SpringBoot启动流程简析(四)

在我们之前的web开发中,通常都是将应用打成war包或者将编译之后的应用放到tomcat的webapps目录下(其他的web服务器放到相应的目录下),但是我们在用SpringBoot进行web开发的时候,只是启动了一个main类,然后就会神奇的发现tomcat竟然也被启动了(SpringBoot也内置了Jetty),SpringBoot是怎么做到的呢?下面我将慢慢揭开它的神秘面纱: 我们之前说过在

2017-12-25 21:37:56 1538 1

原创 SpringBoot启动流程简析(三)

我们在上一节中说了SpringBoot的应用上下文的对象是AnnotationConfigEmbeddedWebApplicationContext,通过名字直译就是注解配置的可嵌入的web应用上下文。我们对它先不做过多的介绍,在不远的文章中我们就会对它进行一下简单的分析。//上下文的一些准备动作prepareContext(context, environment, listeners

2017-12-20 23:00:54 1235 1

原创 SpringBoot启动流程简析(二)

在这篇文章中,我们接着上一篇的内容接着分析。 public ConfigurableApplicationContext run(String... args) { //启动应用的检测 StopWatch stopWatch = new StopWatch(); stopWatch.start(); //SpringBoot的上下

2017-12-19 23:55:20 1298 1

原创 SpringBoot启动流程简析(一)

我想很多人已经在项目中使用SpringBoot做项目开发的工作了,创建SpringBoot和启动SpringBoot应用都会较简单一点,下面我以SpringBoot官网上的Demo来简单的分析一些SpringBoot的启动流程,我们的启动主类代码如下:@SpringBootApplicationpublic class SpringBootAnalysisApplication { publ

2017-12-13 21:11:31 13661 2

原创 SpringMVC之分析HandlerMethodReturnValueHandler(二)

我们在之前的文章中对HandlerMethodReturnValueHandler进行了简单的分析(SpringMVC之分析HandlerMethodReturnValueHandler(一)), 在 这篇文章中我们继续分析一下HandlerMethodReturnValueHandler这个类。有时候我们的请求映射处理方 法的返回值是View对象,当返回值是View对象时,会被ViewMet

2017-11-20 23:58:08 1568 3

原创 JDK1.8新特性值Optional

在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行一 些防御式的检查,所以在代码中常常可见if(obj != null) 这样的判断。幸好在JDK1.8中,java为我们提供了 一个Optional类,Optional类能让我们省掉繁琐的非空的判断。下面先说一下Optional中为我们提供的方法 方法 描述 of 把指定

2017-11-20 23:19:36 40310 14

原创 SpringBoot源码分析之CommandLineRunner、ApplicationRunner

我们在之前的文章中简单的说过SpringBoot的CommandLineRunner和ApplicationRunner这两个接口 SpringBoot之CommandLineRunner接口和ApplicationRunner接口,这篇文章中我们从源码上简单的分析一下这两个 接口。在org.springframework.boot.SpringApplication#run()这个方法中有这样

2017-11-19 23:12:32 2108

原创 SpringBoot特性之Actuator

SpringBoot自动配置的特性,很大程度上解放了我们繁琐的配置的工作,但是也向我们屏蔽了很多内部运行 的细节,好在SpringBoot为我们提供了Actuator,Actuator在应用程序里提供了众多的Web端点,通过它 们,我们可以了解应用程序运行时的内部状况。我们可以了解Bean的组装信息,获取环境配置信息,等等 Actuator为我们提供了如下的一些端口 HTTP方法

2017-11-19 20:48:21 1186

原创 使用线程池导出Excel数据

之前同事在做一个功能的时候,需要导出一些数据,但是组装数据量的过程比较麻烦一点,所以这里给了一个建议看看能不能使用多线程的方法来进行处理。顺便写了两个demo,一种方式是批量分段去往一个sheet页中写入数据,另一种方式是往多个sheet也中写入数据。demo如下: 批量分段导出数据package com.zkn.newlearn.opensource.poi;/** * Created b

2017-11-18 23:23:40 6778 1

apache_camel_tutorial

apache_camel_tutorial

2020-11-13

Netty权威指南第2版.

Netty 权威指南 第2版 Netty 权威指南 第2版 Netty 权威指南 第2版 Netty 权威指南 第2版 Netty 权威指南 第2版 Netty 权威指南 第2版 Netty 权威指南 第2版 Netty 权威指南 第2版 Netty 权威指南 第2版 Netty 权威指南 第2版 Netty 权威指南 第2版

2017-10-17

spring-framework-4.3.10.RELEASE

spring-framework-4.3.10.RELEASE spring-framework-4.3.10.RELEASE spring-framework-4.3.10.RELEASE spring-framework-4.3.10.RELEASE

2017-08-31

文件上传代码

文件上传代码

2017-03-08

javax.xml.rpc

javax.xml.rpc

2017-02-20

apache-ant

apache-ant

2016-12-24

org.apache.tools.ant

org.apache.tools.ant

2016-12-24

tomcat 9.0

tomcat 9.0 源码

2016-12-24

Tomcat 8.0 源码

Tomcat 8.0 源码

2016-12-24

tomcat 7.0源码

tomcat 7.0 源码

2016-12-24

tomcat6.0源码

tomcat6.0源码

2016-12-24

Java程序员修炼之道

2016-12-19

spring-boot-中文参考指南

spring-boot 中文参考指南

2016-11-30

rocketmq3.5.8

alibaba-rocketmq3.5.8.zip

2016-10-30

jdk1.7 64位绿色版02

太大了,只能分两次上传。这个是第二部分。jdk1.7 64位绿色版02。

2016-10-24

jdk1.7 64位官方正式版

jdk1.7 64位官方正式版

2016-10-24

postgresql-9.6.0.tar.gz

pgsql-9.6.0 Linux Source

2016-10-21

Sublime Test 3 Package Control

Sublime Test 3 Package Control

2016-09-27

Linux tomcat 7 64位

Linux tomcat 7 64位

2016-09-21

dubbo-admin-2.5.4-SNAPSHOT.war

dubbo-admin-2.5.4-SNAPSHOT.war

2016-09-13

dubbo-admin-2.5.4

2016-09-13

zookeeper-3.3.6.tar.gz

zookeeper

2016-09-13

Java面试笔试题汇总(精选版)

Java面试笔试题汇总(精选版).pdf

2016-08-11

Spring Boot小例子

Spring Boot小例子

2016-08-08

Spring-4.3源码

Spring源码、spring4.3

2016-07-05

空空如也

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

TA关注的人

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