Spring
文章平均质量分 91
程序新视界
个人公众号【程序新视界】,一个硬技术,软实力同步提升的平台。《Spring Boo技术内幕:架构设计与实现原理》作者,《深入以太坊智能合约开发》联合作者之一。主要从事于三方支付行业。
展开
-
Spring获取Bean的9种方式
随着SpringBoot的普及,Spring的使用也越来越广,在某些场景下,我们无法通过注解或配置的形式直接获取到某个Bean。比如,在某一些工具类、设计模式实现中需要使用到Spring容器管理的Bean,此时就需要直接获取到对应的Bean。本文为大家整理汇总了常见的获取Bean的方式,并提供一些优劣分析,方便大家在使用到时有更好的选择。同时,也会为大家适当的普及和拓展一些相关知识。原创 2023-01-13 09:16:03 · 716 阅读 · 0 评论 -
扒去Spring事件监听机制的外衣,竟然是观察者模式
Spring中提供了一套默认的事件监听机制,在容器初始化时便使用了这套机制。同时,Spring也提供了事件监听机制的接口扩展能力,开发者基于此可快速实现自定义的事件监听功能。Spring的事件监听机制是在JDK事件监听的基础上进行的扩展,也是在典型观察者模式上的进一步抽象和改进。所以,结合Spring的事件监听机制与观察者模式来学习,可以达到理论与实践的完美融合。本篇文章就以观察者模式和Spring事件监听机制作为切入点,结合具体的实例来对两者进行系统的学习和实践。观察者模式是一个典型的发布-订阅。原创 2022-11-15 09:07:11 · 404 阅读 · 1 评论 -
@PostConstruct注解是Spring提供的?今天讲点不一样的
前言我们在讲《Spring的Lifecycle》时提到,在Spring的使用中可以通过Lifecycle接口实现一些基于Spring容器生命周期逻辑。与此对照的就是通过@PostConstruct和@PreDestroy在Bean初始化或销毁时执行一些操作。很明显Spring的Lifecycle是基于容器的生命周期来处理逻辑,而@PostConstruct和@PreDestroy是基于Bean的生命周期来处理业务逻辑。这里很多朋友就产生了一个误解,以为@PostConstruct注解也是Spring提原创 2021-06-01 06:50:36 · 997 阅读 · 0 评论 -
Spring的Lifecycle和SmartLifecycle,可以没用过,但不能不知道!
前言在使用Spring的过程中,我们通常会用@PostConstruct和@PreDestroy在Bean初始化或销毁时执行一些操作,这些操作属于Bean声明周期级别的。那么,就存在一些遗漏的场景,比如我们想在容器本身的生命周期(比如容器启动、停止)的事件上做一些工作,很典型的就是Spring Boot中启动内嵌的Web容器。该怎么办?这就需要用到Spring提供的另外一个接口Lifecycle。这篇文件就介绍一下Lifecycle接口,以及比它更聪明(Smart)的SmartLifecycle。L原创 2021-05-27 21:39:27 · 2491 阅读 · 1 评论 -
过滤器与拦截器的N个区别,别傻傻分不清了
Spring的拦截器与Servlet的Filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等。但它们之间又有不少区别,很多朋友工作多年,可能还没有深刻的了解它们的具体使用以及它们之间的区别。本文带大家全面了解一下它们的使用、实现机制以及区别。过滤器(Filter)的详解及使用过滤器(Filter)属于Servlet的范畴,可以认为是Servlet的一种“加强版”,通过实现javax.servlet.Filter接口来实现功能。主要用于对用户请求进行预处理,是个典型的处理链原创 2020-12-25 09:43:20 · 939 阅读 · 3 评论 -
只因多看了一眼提示,又一次刷新了@Autowired注释的认知
@Autowired和@Resource都可以用于来实现依赖注入,但前者是Spring提供的,后者为JDK(JSR-250标准)自带的。阿里Java开发规范中推荐使用@Resource。但大多数人往往并没有留意为何如此,甚至代码中的提示信息可能都没留意去看。本文就带大家彻底了解一下这两个注解的功能、运用场景及区别。IDE的提示如果在项目中使用@Autowired进行注入,如下代码:@RestControllerpublic class InjectController { @Autowir原创 2020-12-17 08:01:19 · 626 阅读 · 0 评论 -
Spring中ApplicationListener的使用
背景ApplicationListener是Spring事件机制的一部分,与抽象类ApplicationEvent类配合来完成ApplicationContext的事件机制。如果容器中存在ApplicationListener的Bean,当ApplicationContext调用publishEvent方法时,对应的Bean会被触发。这一过程是典型的观察者模式的实现。ApplicationL...原创 2019-07-17 11:24:47 · 3526 阅读 · 0 评论 -
SpringBoot运行源代码分析
我们知道SpringBoot是基于“约定优于配置”,也知道可以根据starters自动加载和配置相应的服务,那么SpringBoot底层是怎么实现这些操作呢?这篇文章带大家通过源码分析,了解SpringBoot运行原理。SpringApplication的拆解通常创建SpringBoot项目之后,默认的启动代码只有一行,通过默认的配置基本上可以完成大多数的功能,但如果需要对启动流程的扩展,就需...原创 2019-04-14 22:30:21 · 1377 阅读 · 0 评论 -
SpringBoot运作原理解析之加载AutoConfiguration
本篇文章带大家了解一下SpringBoot的运作原理之自动配置加载。在此之前可先学习《SpringBoot运行源代码分析》,了解SpringBoot启动的基本流程和涉及到的一些配置文件。说到SpringBoot的运作原理,先来看一下@SpringBootApplication这个注解。在文章《SpringBoot入口类和@SpringBootApplication详解》中已经详细讲解过此入口类和...原创 2019-04-17 11:14:08 · 2737 阅读 · 0 评论 -
SpringBoot基础之MockMvc单元测试
SpringBoot创建的Maven项目中,会默认添加spring-boot-starter-test依赖。在《5分钟快速上手SpringBoot》中编写的单元测试使用了MockMvc。本篇文章就围绕MockMvc在SpringBoot中的使用进行讲解。什么是Mock在面向对象的程序设计中,模拟对象(英语:mock object)是以可控的方式模拟真实对象行为的假对象。在编程过程中,通常通过模...原创 2019-04-02 22:58:34 · 46463 阅读 · 20 评论 -
SpringBoot基础之配置详解
大家好,我是二师兄,本篇文章为大家讲解SpringBoot相关配置功能,包括application.properties配置文件、外部配置、属性注入等。配置文件基本配置支持创建SpringBoot项目,会在src/main/resources目录下生成application.properties文件,这就是SpringBoot默认指定的配置文件。基本使用方式如下:server.port=8...原创 2019-04-08 11:56:22 · 819 阅读 · 2 评论 -
Spring核心模块及功能汇总
如果你在使用Spring,而且没有使用SpringBoot,那么每个Spring的功能都需要引入相应的jar包依赖。而Spring的jar包依赖又有一二十个,很容易混淆,造成编译或运行错误。下面我们就整理一下Spring3和Spring4的核心模块和对应的jar包,方便我们在具体使用的过程中更加清晰的了解到我们都需要什么。Spring3框架结构图Spring4框架结构图与Spring3...原创 2019-03-28 17:21:42 · 6606 阅读 · 0 评论 -
SpringBoot基础之banner玩法解析
SpringBoot项目启动时会在控制台打印一个默认的启动图案,这个图案就是我们要讲的banner。看似简单的banner,我们能够对它做些什么呢?本篇文章就带大家深入了解一下banner的使用(版本:SpringBoot2.1.4)。制作自己的banner第一步:在src/main/resources下面创建banner.txt。第二步:访问网站http://patorjk.com/so...原创 2019-04-07 13:48:57 · 11943 阅读 · 3 评论 -
Spring+dubbo+mybatis出现NoSuchMethodError和MutablePropertyValues.add异常
场景Spring+mybatis3+ dubbo整合下,出现以下异常。在此问题上花费了两个多小时,终于查到原因。org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [applicationCo原创 2016-03-10 16:51:33 · 5084 阅读 · 0 评论 -
Spring ApplicationListener使用方法及问题
使用场景在一些业务场景中,当容器初始化完成之后,需要处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等。这个时候我们就可以使用Spring提供的ApplicationListener来进行操作。用法本文以在Spring boot下的使用为例来进行说明。首先,需要实现ApplicationListener接口并实现onApplicationEvent方法。把需要处理的操作放在onAppl原创 2017-05-12 13:48:26 · 60361 阅读 · 4 评论 -
Spring注解的(List&Map)特殊注入功能
最近接手一个新项目,已经没有原开发人员维护了。项目框架是基于Spring boot进行开发。其中有两处Spring的注解花费了大量的时间才弄明白到底是怎么用的,这也涉及到spring注解的一个特殊的注入功能。首先,看到代码中有直接注入一个List和一个Map的。示例代码如下:@Autowiredprivate List<DemoService> demoServices;@Autowiredpr原创 2017-05-10 09:39:55 · 25764 阅读 · 5 评论 -
你可能使用了Spring最不推荐的注解方式
前些天新加入项目中的小伙儿写了一段代码,我看到之后,顿时以固有的经验来判断说:Spring的注解不能这样写,不够简洁云云。但本着对技术的钻研精神,还是深入分析比较了一下Spring的注解形式及优缺点。原来,大家最常用的注解方式不是最优的,而是最不推荐的。前言使用Spring框架最核心的两个功能就是IOC和AOP。IOC也就是控制反转,我们将类的实例化、依赖关系等都交由Spring来处理,以...原创 2018-12-31 23:23:16 · 3699 阅读 · 3 评论 -
Spring 框架和 Spring Boot的前世今生
Spring 框架可以说是Java开发人员使用的最流行的应用程序开发框架之一。它目前由大量提供一系列服务的模块组成。包括模块容器,为构建横切关注点提供支持的面向切面编程(AOP),安全框架,数据存取框架,Web 应用框架和用于模块测试提供支持的类。Spring 框架的所有组件都通过依赖注入粘在一起。依赖注入(也称为控制反转)使设计和测试松散耦合的软件模块变得更容易。多年来 Spring 框架已...转载 2018-12-31 23:56:25 · 3749 阅读 · 1 评论 -
spring 4.3新特性之@RequestMapping注解细化
通常,通过@RequestMapping来对http请求进行注解会采用如下方式:@RequestMapping(value = {&quot;/version&quot;}, method = {RequestMethod.GET})或@RequestMapping(value = {&quot;/login&quot;}, method = {RequestMethod.POST})// 如果没有指定method则同时支持G...原创 2019-02-21 15:33:08 · 1374 阅读 · 0 评论 -
Spring注解之@Configuration和@Bean使用详解
如果此刻不方便阅读,倾情为你准备了PDF版本,关注微信公众回复“spring配置”即可获得。前言Spring3.0之前要使用Spring必须要有一个xml配置文件,而Spring3.0之后注解慢慢登上舞台,通过注解@Configuration和@Bean可以完全搞定。此时,注解和xml配置形成了相互协作与竞争的关系。随着Springboot的推广,注解的使用在Spring中大放光彩,xml...原创 2019-02-25 18:54:22 · 15075 阅读 · 0 评论 -
5分钟快速上手Spring Boot
概述与一些动态语言(如Ruby、Groovy、Node.js)相比,Java开发显得异常笨重。接触过外包项目的朋友也有所了解,如果要开发一个小型项目,首选的编程语言并不是Java,而是PHP。为什么呢?因为开发起来快!目前很多大型互联网公司的早起编程语言都是类似PHP这种能够快速开发的语言。既然问题出现了,那必然有解决问题的方案,SpringBoot做到了。SpringBoot是由Pivota...原创 2019-04-01 12:09:52 · 2032 阅读 · 2 评论 -
SpringBoot入口类和@SpringBootApplication详解
SpringBoot项目创建完成之后默认会生成一个*Application的入口类,通过该类的main方法即可启动SpringBoot项目。@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)public class SpringbootRunApplication { public static void ...原创 2019-04-06 15:56:02 · 7614 阅读 · 0 评论 -
@Autowired与@Resource的区别
1、@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。 2、@Autowired属于Spring的;@Resource为JSR-250标准的注释,属于J2EE的。 3、@Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(r转载 2015-07-01 15:12:32 · 2759 阅读 · 0 评论