![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
安迪源文
小步快走
展开
-
非Spring环境单独引入AnnotationConfigApplicationContext注解方式使用组件
package com.paas.app.hello;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.ComponentScan;// @Configuration // 这种模式下该注解已经没有必要使用@ComponentScan(value = "com.paas.app.hello")原创 2021-04-03 08:53:14 · 969 阅读 · 0 评论 -
Spring 任务调度核心概念模型
关于任务调度,Spring 有如下几个核心概念 :Task – 任务用于表示一个有待执行的任务;该任务有可能需要被执行一次;在特定的时间点执行一次;或者在某个时间点之后再延时特定的时间段之后执行一次;也有可能需要被反复执行多次;在特定时间点之后间隔特定的时间段重复执行;或者在 cron 表达式指定的运行时机重复执行;Spring不存在针对任务对应的接口/类抽象,S...原创 2019-12-04 16:41:19 · 488 阅读 · 0 评论 -
Spring 环境抽象 Environment
Environment 是Spring核心框架中定义的一个接口,用来表示整个应用运行时的环境。原创 2017-11-12 14:40:40 · 5034 阅读 · 1 评论 -
Spring : 概念模型接口 HttpMessageConverter
HttpMessageConverter原创 2018-05-27 00:24:45 · 531 阅读 · 0 评论 -
Spring bean 作用域Scope小结
Scope 描述 singleton 一个Bean定义在整个Spring IoC容器中只会有一个实例1.所有使用该bean的使用者都是在使用同一个bean实例2.Spring bean的缺省作用域属性 prototype 一个Bean定义会对应多个bean实例1.使用者每次注入一个该作用域的bean,或者使用getBean()方法从容器获取该作用域的bean时得到都是原创 2018-01-23 17:59:30 · 309 阅读 · 0 评论 -
Spring web 工具类 WebApplicationContextUtils
概述Spring web 的工具类 WebApplicationContextUtils 位于包org.springframework.web.context.support是访问一个ServletContext的根WebApplicationContext的便捷方法类。该工具类提供了如下工具方法 :在web容器启动过程中注册web相关作用域bean : request,se原创 2018-02-04 13:10:30 · 2959 阅读 · 0 评论 -
缺省配置Spring boot Web中一个请求的处理流程
概述缺省配置Spring boot Web中一个请求的处理流程,主要经历了以下组件,本文将基于源代码对此流程做详细分析 :Tomcat (容器标准组件)Spring MVC (容器标准组件)开发人员提供的Web Controller方法 (开发人员实现的业务逻辑)本文用于分析该处理流程的源代码来自项目 : 完全采用缺省配置的最简Spring-boot Web应用To原创 2018-01-21 18:33:46 · 3637 阅读 · 1 评论 -
Spring bean的生命周期
Bean 准备阶段Spring 容器从XML文件或者注解中找到bean定义并实例化bean对象(相当于new一个对象);Spring依赖注入填充所有bean定义中涉及到的属性;Aware 接口方法调用; 如果bean实现了接口 BeanNameAware, 调用方法setBeanName(该bean的ID);如果bean实现了接口 BeanClassLoaderAware,调用方法s原创 2018-02-06 15:20:22 · 342 阅读 · 0 评论 -
Spring框架中的设计模式(一)
设计模式帮助开发人员遵循编程最佳实践。作为最流行的Web框架,Spring也使用了设计模式。这篇文章会讲解Spring框架使用了哪些设计模式以及怎么使用的。该主题文章分成5部分,这是第一部分。这一部分中我们会覆盖Spring框架使用的四种设计模式 : 解释器interpreted,生成器builder,工厂方法factory method 和 抽象工厂abstract factory。每部分会...翻译 2018-03-30 14:46:30 · 1478 阅读 · 0 评论 -
Spring和线程:事务
为了能在我们的线程中使用事务,我们需要了解Spring中事务的工作机制。Spring中,事务信息存储在ThreadLocal变量中。因此,这些变量是某个线程上进行的事务所特有的(译注:这些变量对于其他线程中发生的事务来讲是不可见的,无关的)。单线程的情况下,一个事务会在层级式调用的Spring组件之间传播。但是在@Transactional注解的服务方法会产生一个新的线程的情况下,事务是不...翻译 2018-04-07 17:39:25 · 3147 阅读 · 0 评论 -
Spring 事件
简介这篇文章我们来讲解Spring中如何使用事件。Spring中使用事件,需要遵守一些规则 :使用以下两种方式之一定义事件 继承自 ApplicationEvent不继承自ApplicationEvent使用以下两种方式之一定义事件发布者 注入一个ApplicationEventPublisher对象到事件发布者事件发布者实现接口ApplicationEventPublis...原创 2018-04-07 19:08:15 · 1473 阅读 · 0 评论 -
Spring框架中的设计模式(二)
上一部分我们谈Spring中的设计模式,讲了三种对象创建模式(生成器builder,工厂方法factory method,抽象工厂abstract factory)和一种行为模式(解释器interpreter),这一部分我们会聚焦在更多结构和行为模式上面。这部分我们分别看两种结构模式(structural)和两种行为(behavioral)模式。前两个会是结构化设计模式:代理模式(proxy)...翻译 2018-04-01 10:39:01 · 358 阅读 · 0 评论 -
Spring框架中的设计模式(三)
前两篇文章我们看到了Spring框架实现的一些模式,这次我们再讲解这个流行框架使用的另外三个模式。这篇文章会从两个对象创建模式开始:原型模式(prototype)和对象池(object pool)。最后我们会聚焦在一个行为模式 : 观察者(observer)。Spring 设计模式 - 原型模式 prototype本文首先谈原型模式(prototype)。在Spring关于bean...翻译 2018-04-01 16:37:57 · 1002 阅读 · 0 评论 -
Spring框架中的设计模式(四)
这篇文章是该系列关于spring框架设计模式文章的第四篇,会继续介绍3个框架使用的设计模式。最开始,我们会介绍两个结构设计模式:适配器模式adapter和装饰模式decorator。第三个,也就是本文最后一部分,我们会介绍一个对象创建设计模式:单例singleton。Spring设计模式 - 适配器adapter适配器模式应用在当我们需要将接口适配到特定的环境而且不需要修改接口自身...翻译 2018-04-01 22:36:19 · 334 阅读 · 0 评论 -
Spring框架中的设计模式(五)
通过之前四篇文章,我们看到Spring采用了大量对象创建和结构设计模式。这些大都不是行为设计模式,作为该系列最后一篇关于Spring设计模式的文章,本文再讲两个行为设计模式。这篇文章我们会讲两个行为设计模式:命令模式和访问者模式。Spring 设计模式 - 命令模式command本文第一个我们要讲述的模式是命令模式。它允许将一个请求(request)封装到一个对象然后将其跟一个回调...翻译 2018-04-03 18:46:10 · 1335 阅读 · 0 评论 -
Spring框架中的设计模式系列翻译文章目录
Spring框架中的设计模式系列翻译文章小结Spring框架中的设计模式(一) interpreter,builder,factory method,abstract factorySpring框架中的设计模式(二) proxy,composite,strategy,template methodSpring框架中的设计模式(三) prototype,object pool,obse...原创 2018-04-03 18:50:30 · 268 阅读 · 0 评论 -
Spring和线程:TaskExecutor
当你想在Web应用中运行长时间的任务时,别忘了使用Spring的TaskExecutor,它能帮你管理相关组件。Web应用中使用线程也不是什么罕见的事情,尤其是你需要开发长时间运行的任务时。Spring中,我们必须特别注意并使用它已经提供的工具,而不是使用我们自己新建线程的方式。我们希望我们的线程能够被Spring管理,这样就既能使用应用程序的其他组件,也不会带来任何坏影响。我们也希望...翻译 2018-04-07 10:33:34 · 7745 阅读 · 0 评论 -
Spring和线程:异步操作
之前我们开始了在Spring中使用任务执行器TaskExecutor,这样对于在Spring应用中如何使用线程,我们就更熟悉了。然而有时候使用任务执行器可能有些啰嗦,特别是我们只需要执行一个简单的动作时。这时候Spring的异步方法就派上用场了。相比把任务执行器TaskExecutor和可运行任务Runnable混到一起,你可以交出执行器的控制权,换做使用简单的异步功能。为了在另外...翻译 2018-04-07 11:24:01 · 586 阅读 · 0 评论 -
缺省配置Springboot Web应用启动过程中定义的Bean
1. ApplicationContext 对象构建时登记 6 个 bean 定义对于完全采用缺省配置的Springboot Web应用,其ApplicationContext的实现类最终采用 AnnotationConfigEmbeddedWebApplicationContext,它位于包 org.springframework.boot.context.embedded中。该类原创 2017-11-15 18:21:08 · 4080 阅读 · 4 评论 -
Spring Boot Web 应用中Spring Security DelegatingFilterProxy 的注入
elegatingFilterProxyRegistrationBeanpackage org.springframework.boot.web.servlet;import javax.servlet.Filter;import javax.servlet.ServletContext;import javax.servlet.ServletException;import ...原创 2018-07-31 17:22:14 · 1595 阅读 · 0 评论 -
Spring的注解@DependsOn
用途注解@DependsOn位于如下包 org.springframework.context.annotation该注解用于声明当前Bean依赖于另外一个Bean。所依赖的Bean会被容器确保在当前Bean实例化之前被实例化。举例来讲,如果容器通过@DependsOn注解方式定义了Bean plant依赖于Bean water,那么容器在会确保Bean water的实例在实例化Bean plant原创 2017-12-21 10:15:31 · 32755 阅读 · 1 评论 -
Spring Security 中跨 request 请求保持 SecurityContext
在一个ServletWeb应用中,对于一个请求进行处理的全过程,服务端使用的是同一个线程,通过利用SecurityContextHolder的MODE_THREADLOCAL安全上下文SecurityContext保持机制,无论该处理过程中使用到了哪些对象的哪些方法,这些方法内都可以获得当前访问者的安全上下文SecurityContext。但是,如果跨多个请求需要保持同样的安全上下文Securit...原创 2018-08-10 12:17:37 · 3889 阅读 · 5 评论 -
未登录用户访问受Spring Security保护的Web页面/API时发生了什么 ?
在应用Spring Security的Web应用中,假定全部采用缺省配置,如果用户在未登录状态试图访问一个受保护的HTTP资源,可能是我们的一个页面,也可能是一个Restful API,此时:Spring Security会抛出异常AuthenticationException;ExceptionTranslationFilter过滤器捕获到该异常,调用其属性authenticationE...原创 2018-08-07 18:23:30 · 4653 阅读 · 0 评论 -
Spring Security Web应用中用户访问自己无权访问的资源时发生了什么?
在应用Spring Security的Web应用中,假定全部采用缺省配置,如果用户已经登录(且未超时过期),但试图访问一个自己没有权限的HTTP资源,此时:Spring Security会抛出一个异常AccessDeniedException;ExceptionTranslationFilter过滤器会调用其属性accessDeniedHandler对象(类型为AccessDeniedHa...原创 2018-08-07 18:35:37 · 1532 阅读 · 0 评论 -
Spring Security Config : WebSecurityConfiguration Web 安全配置
package org.springframework.security.config.annotation.web.configuration;// 忽略 import 行/*** Spring Security 的配置类 : * 1. 使用一个 WebSecurity 对象创建执行 Spring Security 基于web的安全任务的 FilterChainProxy 对象。...原创 2018-09-02 10:07:28 · 4699 阅读 · 0 评论 -
Spring Web 4 源码阅读笔记 : 过滤器 OncePerRequestFilter
一个Filter在对一次客户端请求request的处理中,常识上的理解,应该只被应用一次。这种理解很直观,也很合理,然而实际情况并非如此。举例来讲,使用tomcat和Spring MVC + JSP开发web时应用,客户端请求某个JSP页面的URL时,你就会发现你的一个过滤器会被应用多次,也就是它的 doFilter()方法会被调用多次。其他的情况,比如某个JSP页面中使用 include包含了...原创 2018-09-26 16:33:12 · 960 阅读 · 0 评论 -
Spring DispatcherServlet 对请求JSP/FreeMarker模板页面的处理有何不同?
Spring DispatcherServlet 的继承关系请求到达 // 所在类 : org.springframework.web.servlet.FrameworkServlet @Override protected final void doGet(HttpServletRequest request, HttpServletResponse response) thro...原创 2018-09-21 10:47:23 · 846 阅读 · 0 评论 -
Spring MVC 的基本概念,组件和核心逻辑
DispatcherServletSpring MVC 的前端控制器Servlet,所有到达请求的统一处理入口,具体的处理工作派发给所配置的其他Spring MVC组件。执行请求处理的其他Spring MVC 组件被定义为具体的 bean。这些组件按照Spring MVC定义好的的工作模式和流程(build-in contracts)协调工作。基本概念前端控制器Servlethandle...原创 2018-10-16 18:07:31 · 1071 阅读 · 0 评论 -
Spring Web : RequestContextHolder 和 RequestContextFilter
Spring Web 提供了一个工具类 RequestContextHolder用来在当前线程中暴露当前请求及其属性RequestAttributes。这样的话在整个请求处理过程中,在当前线程中通过此工具类就可以获取对象RequestAttributes,从而就可以访问当前请求及其属性。RequestAttributes是一个接口,用于抽象一个请求的所有属性对象。RequestContextHo...原创 2018-10-22 10:55:59 · 4328 阅读 · 0 评论 -
Spring MVC : 如何找到请求的目标控制器方法 ?
概述Spring MVC Web应用开发时,我们会开发出相应的 controller class/method, 关联到相应的url,然后用户在访问系统时,输入正确的url,相应的controller class/method 就会被执行,返回给用户相应的处理结果。那么Spring MVC Web应用内部是如何找到一个请求对应的controller class/method方法呢 ? 本文基于源...原创 2018-10-17 12:02:43 · 1355 阅读 · 0 评论 -
Spring MVC : 从Model和View名称生成最终的View
当我们使用 Spring MVC开发Web应用页面时,一般会使用某种视图模版引擎技术,比如FreeMarker,Velocity之类的,然后还会写很多控制器方法用来处理某个请求,这些控制器方法基本的套路是:写一个视图模板,配置到合适的位置;控制器方法接收处理来自客户端的参数接收处理来自客户端的参数;控制器方法调用服务端逻辑生成将要渲染到客户端的数据Model对象;控制器方法返回所开发的视...原创 2018-10-21 13:03:21 · 978 阅读 · 0 评论 -
Spring 事务注解@Transactional使用注意事项
缺省情况下,Spring 事务基于Spring AOP技术,此时使用事务注解 @Transactional 需要留意以下问题 :不要在 protected,private 或者包内可见方法上使用注解 @Transactional,用了也无效 ;要点 : 缺省情况下, @Transactional 注解要应用在可见性为 public 的方法 ;@Transactional注解的方法...原创 2018-11-01 17:55:52 · 7075 阅读 · 1 评论 -
Spring 基于注解的 bean 定义/注册方式总结
XML 方式注册bean使用注解包扫描 + 组件注解@Controller/@RestController – 一般用于定制控制器组件bean@Service – 一般用于定义业务服务逻辑层组件bean@Repository – 一般用于定义数据存储访问组件bean@Component – 定义一个一般组件bean@Component是前三个注解的基础配置类注解...原创 2018-11-06 14:56:03 · 2863 阅读 · 0 评论 -
Spring @Import 的使用及其工作原理分析
@Import 如何使用 ?参考文章"向 Spring IoC容器注册 bean 的方式总结"中关于@Import的部分。@Import 背后是如何工作的 ?参考文章"Spring 工具类 ConfigurationClassParser 是如何工作的 ?"中关于processImports()的部分。...原创 2018-11-06 17:53:23 · 4672 阅读 · 0 评论 -
Springboot 内置ApplicationContextInitializer
概述在包org.springframework.context中提供了这样一个接口ApplicationContextInitializer :public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext&amp原创 2018-11-13 17:15:58 · 2321 阅读 · 0 评论 -
Spring AOP proxyTargetClass 行为表现总结
proxyTargetClasstrue目标对象实现了接口 – 使用CGLIB代理机制目标对象没有接口(只有实现类) – 使用CGLIB代理机制false目标对象实现了接口 – 使用JDK动态代理机制(代理所有实现了的接口)目标对象没有接口(只有实现类) – 使用CGLIB代理机制...原创 2018-11-11 18:26:19 · 11015 阅读 · 0 评论 -
Springboot 应用工作原理简述
同传统的Spring开发模式相比,开发Springboot应用时,我们只需要引入相关的starter jar包就能构造一个可以运行起来的应用,这样就可以把主要的精力用于核心业务功能的开发,非常方便和高效。那么,在这种方便和高效背后,Springboot是怎么工作的?这里对其工作原理做一个简单的描述 :项目主动引入的各种starter jar包通过自己的maven POM.xml将自己所依赖的...原创 2018-11-13 18:08:37 · 2053 阅读 · 0 评论 -
Spring factory bean/FactoryBean/BeanFactory 的区别简记
factory bean配置到容器中用来通过实例方法创建其他bean的一种bean。例子 (此例子来自Spring官方文档) :<!-- factory bean, 这是一个bean,包含了一个实例方法 createInstance() 用于创建其他某种类型的bean实例 --><bean id="serviceLocator" class="examples.D...原创 2018-11-11 23:50:12 · 565 阅读 · 0 评论 -
Spring属性源抽象PropertySource
对于各种基于"名称/值"对(key/value pair)的属性源,Spring将其抽象成了抽象泛型类PropertySource<T>。底层的属性源T可以是容纳属性信息的任意类型,比如java.util.Properties,java.util.Map,ServletContext,ServletConfig对象,或者是命令行参数CommandLineArgs对象原创 2018-11-20 15:17:40 · 1468 阅读 · 3 评论 -
Spring命令行参数封装CommandLineArgs
概述Spring对应用程序运行的命令行参数进行了抽象,这个抽象是类CommandLineArgs。CommandLineArgs类将命令行参数分为两类:option 参数以 --开头可以认为是name/value对参数例子 : --foo, --foo=bar非 option 参数不以 --开头可以认为是只提供了value的参数(具体怎么理解这个值,看业务逻辑的需求)...原创 2018-11-21 18:07:27 · 3686 阅读 · 0 评论