Spring Framework
文章平均质量分 91
Spring Framework 相关文章
carl-zhao
I never grew up, but i never stop growing.
展开
-
Spring Webflux 构建响应式 Restful Web 服务
本指南将引导您完成创建“Hello, Spring!”使用Spring WebFlux的rest式web服务(Spring Boot 2.0的新版本),然后使用WebClient使用该服务(Spring Boot 2.0的新版本)。原创 2022-07-30 20:03:34 · 957 阅读 · 0 评论 -
Spring 集成嵌入式数据库方便单元测试
``org.springframework.jdbc.datasource.embedded `` 包提供了对嵌入式 Java 数据库引擎的支持。本机提供了对HSQL、H2 和 Derby 的支持。还可以使用可扩展API插入新的嵌入式数据库类型和 DataSource 实现。嵌入式数据库在项目的开发阶段非常有用,因为它具有轻量级的特性。优点包括易于配置、快速启动时间、可测试性以及在开发期间快速演变SQL的能力。...原创 2022-07-30 10:23:30 · 798 阅读 · 0 评论 -
Spring 自定义 bean 的生命周期
要与容器对bean生命周期的管理交互,您可以实现 Spring ``InitializingBean`` 和 ``DisposableBean`` 接口。容器对前者调用 ``afterPropertiesSet()``,对后者调用 ``destroy()``,以允许bean在初始化和销毁 bean 时执行某些操作。......原创 2022-07-28 23:01:08 · 413 阅读 · 0 评论 -
Spring Cloud Config 解决单例 Bean 依赖非单例 Bean
在大多数应用程序场景中,容器中的大多数 bean 都是单例的。当一个单例 bean 需要与另一个单例 bean 协作,或者一个非单例 bean 需要与另一个非单例 bean 协作时,您通常通过将一个bean 定义为另一个 bean 的属性来处理依赖关系。当 bean 的生命周期不同时,问题就出现了。假设单例 bean A 需要使用非单例(原型) bean B,可能是在 A 上的每个方法调用上。容器只创建一次单例 bean A,因此只有一次机会设置属性。容器不能在每次需要 bean B 的新实例时为 bean原创 2022-07-07 21:34:37 · 608 阅读 · 0 评论 -
Spring Bean Scope
当你创建一个 bean 定义时,可以在这个 bean 定义当中设置你需要创建对象实例的 Class 来创建实例,这可以认为是一次。可以把 bean 定义当成一个食谱。把 bean 定义当是一个菜谱的想法很重要,因为这意味着使用同一个 Class 可以从一个菜谱创建许多对象实例。...原创 2022-06-30 22:22:12 · 357 阅读 · 0 评论 -
使用 Spring AnnotationUtils 解决代码获取类元数据信息
昨天有一个小伙伴遇到一个问题。他最开始是通过在类上面添加注解(这个类纳入了 Spring 容器的管理),然后再通过继承 Spring 容器的扩展类 ApplicationObjectSupport 找到 Spring 容器中所有标注了之前提到的注解。后面解析这个注解,然后把这个注解标注的唯一值和当前对象实例放到一个 MAP 当中。通过这样的方式就实现了策略模式,通过注解上面的标注唯一的值到 ApplicationObjectSupport 的继承类里面获取需要的实例。上面就是出现问题的前提,后面在策略类上原创 2022-05-06 23:06:01 · 2336 阅读 · 0 评论 -
通过 Spring Event 方式优雅的抽象策略模式解决 if else 问题
策略模式是设计模式中非常常用的一种设计模式。它对修改关闭,对扩展开放。而且通过策略模式还可以减少项目中一系列的 ``if else`` 代码块。常见的策略模式也很多种写法。比如:定义一个接口,接口有不同的实现,然后定义一个工厂,把这个接口的实现以对应不同的 Key 保存到这个工厂里面,然后通过传入不同的 key 从定义好的 Map 中获取到对应接口的实例,如果需要新添加策略就直接添加新的实现就可以了。原创 2020-09-26 00:08:36 · 831 阅读 · 0 评论 -
Spring 事务扩展机制 TransactionSynchronization
在进行数据库操作的时候,如果需要多个操作要么一起成功,要么一起失败那么就需要使用事务操作了。使用 Spring 框架只需要在方法上添加 ``@Transactional`` 注解这个方法就具有事务特性了。而且 Spring 也事务操作给开发者提供了很方便的扩展。原创 2020-09-19 20:42:34 · 4328 阅读 · 2 评论 -
Spring Framwork 扩展点总结
接口扩展描述典型场景BeanFactoryPostProcessor对 BeanDefinition 进行修改Class 定义的 Bean,@Configuration 和 @BeanBeanPostProcessor对 Spring Bean 进行修改@Resource 通过反射进行依赖注入FactoryBean使用 Class 定义 BeanSpring 3.0 出现 @Configuration 和 @Bean 的复杂度高的 Bean 创建方式XXX...原创 2020-08-08 12:31:49 · 329 阅读 · 0 评论 -
Apollo 通过 Spring Mvc DeferredResult 实现长轮询服务推送
最近在看 Apollo 配置中心的实现原理,``Apollo`` 的发布配置推送变更消息就是用 ``DeferredResult`` 实现的。``Apollo`` 客户端会循环的向服务端发送长轮训 ``Http`` 请求,超时时间 60 秒 。当超时后返回客户端一个 ``Http Status`` 为 ``304`` 状态码的时候表明配置没有变更,客户端继续这个步骤重复发起请求。当有发布配置的时候,服务端会调用 DeferredResult.setResult 返回 ``200`` 状态码,然后轮训原创 2020-07-04 11:03:13 · 1908 阅读 · 0 评论 -
模仿 Spring 注解事务写出优雅多数据源切换代码
随着公司业务的不断扩大,核心业务的数据量也是爆炸性增长。因为数据库选用和大多数据互联网公司一样使用的是 Mysql 很多表的数据量都超过了 1 kw,所以决定对大表进行数据扩容。并且在容量扩容的时候决定使用双写方案。在调研的时候,有三个方案可以选择:Sharding-jdbc:模仿分片处理,继承 AbstractShardingPreparedStatementAdapter 重写 jdbc...原创 2020-03-29 12:56:18 · 1194 阅读 · 1 评论 -
利用 Spring 自动类型转换与回调模式写出优雅的代码
当我们使用 dubbo 或者 feign 进行 RPC 调用用时,通常的调用模板方式如下:public BizResponse method(BizRequest request){ RpcRequest rpcRequest = buildRpcRequest(); RpcReponse reuslt = xxxFacade.invoke(rpcRequest); // 判断...原创 2020-03-14 18:08:57 · 1148 阅读 · 0 评论 -
多环境测试遇到的问题及解决方案
最近新到的公司由于在服务化,领导叫我调研并使用 apache dubbo 做微服务改造。因为之前的公司基本上都是使用的 dubbo,所以对于服务改造过程并不复杂。而且我还把自己的改造指南分享到公司内网 wiki。这次主要是和大家分享一下在服务改造之后在本地测试遇到的问题。因为我们使用的环境是 aws ,并且使用了 aws 提供的 redis 服务。主要是用来做分布锁及缓存作用,但是在本地调度的时...原创 2020-03-14 16:06:40 · 700 阅读 · 0 评论 -
Spring Security Java Config 浅析
在之前的项目中使用接触过 xml 配置使用 Spring Security。但是最近比较流行 java config。并且对它的 builder 模式比较感兴趣,就会查看了它的源码实现。下面就把自己的分析结果记录下来,希望对阅读这篇博客的你也有帮助。在 Spring Security 里面有两个非常重要的概念认证与授权。- 认证:是确认某主体在某系统中是否合法、可用的过程。这里的主体既可以是登陆系统的用户也可以是接入 的设备或者其他系统- 授权:是指当前主体通过认证之后,是否允许其执行某项操作的过程原创 2020-03-08 13:25:22 · 1124 阅读 · 0 评论 -
Spring FactoryBean 创建的 Advisor 无法应用于增强
最近的工作重心是帮助公司做日志统一格式方面的工作。也就是规范日志,之前的日志文件只分为了 error.log 和 info.log。现在要把它更为细为分以下几种:more business log:细粒度的业务日志文件区分(Dao、Manage、Service、Web)method digest log:方法级别的日志摘要(对应业务日志的摘要日志)a call chain profile ...原创 2020-03-01 15:55:47 · 804 阅读 · 0 评论 -
Spring 无法代理 Mybatis 接口问题
最近公司正在开始平台化,需要统一打印日志格式。由于领导对于我的认可,把这件事情交给我来做。所谓统一日志格式主要是做以下几件事:more business log:细粒度的业务日志文件区分(Dao、Manage、Service、Web)method digest log:方法级别的日志摘要(对应业务日志的摘要日志)a call chain profile log:当前系统一次整个完整调用的层...原创 2020-02-29 21:09:11 · 872 阅读 · 1 评论 -
Spring bean 之 FactoryBean
Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。Spring FactoryBean是创建复杂的bean,一般的bean直接用xml配置即可,如果一个bean的创建过程中涉及到很多其他的bean和复杂的逻辑,用xml配置比较困难,这时可以考虑用FactoryBean.原创 2016-08-12 23:05:18 · 1462 阅读 · 0 评论 -
Spring MVC 与 Servlet
相信大家都能够在上网上看到Spring MVC的核心类其实就是DispatherServlet,也就是Spring MVC处理请求的核心分发器。其实核心分发器几乎是所有MVC框架设计中的核心概念,像在Struts2也有类似的分发器FilterDispatcher。只不过Spring MVC中的是一个Servlet,而Struts2里面的是一个Filter.原创 2017-08-05 19:13:52 · 10254 阅读 · 2 评论 -
Spring MVC 之 调用复用
如果大家看过Spring MVC的源代码都会知道.Spring MVC框架在Spring容器初始化的时候,通过@RequestMapping建立起请求路径与调用方法的映射(没有看过源码的同学应该也能够想明白)。原创 2017-08-08 22:19:41 · 2923 阅读 · 0 评论 -
Spring Class Global Method
今天在遇到一个有意思的问题,那就是我们可以在Spring的xml配置文件里面可以定义bean的全局的init和destroy方法。如下图所示:我们可以看到在beans这个标签里面可以定义一些bean的全局属性,其中包括default-init-method与default-destroy-method方法。原创 2017-12-18 12:52:49 · 580 阅读 · 0 评论 -
Spring MVC 之 自定义List绑定
Spring MVC对于普通对象可以很容易的进行数据绑定,但是对于复杂对象比如说集合就支持得不太友好。对于普通对象Spring通过在请求参数里面参数名称与定义的接收对象的属性名称一致就可以进行数据绑定了。比如:定义的实体对象为:import lombok.Data;@Datapublic class User { private int id; privat原创 2018-01-05 13:36:35 · 2205 阅读 · 0 评论 -
JDK Aop 应用实例
公司需要新开发一个项目,功能在这里不需要Care,主要是基于我们之前的会员网关以及资金网关。这两个服务都是支持 GET/POST 的 https 请求的调用。因为我们这个项目是第三方支付,所以安全方面比较关注。请求方式使用的是 https 方式,然后数据在传输过程过程中需要把请求的数据进行加签,对于敏感数据(比如手机,实名,银行卡等)还需要加密。其中请求参数包括基本参数与业务参数,而对于响应参数的...原创 2018-03-08 20:37:03 · 798 阅读 · 0 评论 -
史上最简单的 Spring 源码导读
做为Java开源世界的第一框架,Spring已经成为事实上的Java EE开发标准Spring框架最根本的使命是简化Java开发,因此学习、研究、掌握Spring框架成为每一位Java开发人员的必修课。而阅读源码则是学习Spring的最好方式之一。Spring 里面最重要的特性就是 Ioc,可能你还会说 aop。其实 aop 的实现也是基于 ioc。Ioc (Inversion of Cont...原创 2018-04-19 08:06:30 · 2811 阅读 · 0 评论 -
Spring environment abstraction
Environment 是 Spring 容器中对于应用环境两个关键因素的一个抽象。它们分别是:Profiles 和 properties。Profile 是一个 bean 定义命名的逻辑分组。容器中可以配置多个 Profile,但是需要指定 profile 才会把这个 Profile 下的分组 bean 定义注册到容器中。 无论 beans 是定义在 XML 还是 注解里面都可以分配给一个 ...翻译 2018-08-03 20:04:01 · 434 阅读 · 0 评论 -
spring import 占位符
一般情况下我们在Spring的配置文件中使用<import>标签是这样的,<import resource="other-beans.xml">。如原创 2018-08-01 00:18:59 · 1197 阅读 · 0 评论 -
Spring 依赖注入优化
Spring 最大的好处就是依赖注入,关于什么是依赖注入,在Stack Overflow上面有一个问题,如何向一个5岁的小孩解释依赖注入,其中得分最高的一个答案是: When you go and get things out of the refrigerator for yourself, you can cause problems. You might leave the door...原创 2018-08-05 22:38:04 · 752 阅读 · 0 评论 -
7、Spring Integration RabbitMQ
经过前面的教程我们知道了 RabbitMQ 里面的基本的队列消息发送,以及不同类型的交换器的消息发送。今天就来分享一下 RabbitMQ 与 Spring 集成的 demo。集成里面主要分享三个类型的消息:默认交换器(也就是队列)类型的消息, 发送一个测试消息到队列queue.test.queue 里面。然后使用监听去打印获取到的消息。fanout(扇形)交换器类型的消息,也就是发布/订阅...原创 2018-08-14 23:42:10 · 2835 阅读 · 3 评论 -
Spring COC TypeConverter
Spring的核心思想是IOC(Inversion of Control),DI其实就是IOC的另外一种说法。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。当一个对象需要使用其它对象时,通过Spring容器动态的向这个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。原创 2017-08-12 17:27:51 · 2265 阅读 · 0 评论 -
Spring XML AOP
本文主要是以xml配置的形式来讲解Spring AOP的整个思想与处理过程,Spring AOP的整个过程其实是与IOC的初始化紧密的结合在一起的。大家在看本文之前最好看一看博主之前写的两篇文章,Spring AOP Concepts 和 Spring Extensible XML 这两篇文章。原创 2017-01-14 09:21:50 · 763 阅读 · 0 评论 -
Spring IOC BeanFactory(译)
BeanFactory仅仅是为Spring IOC提供下层的基础功能,它仅仅是用来集成其它第三方框架。在Spring中使用的底层大量特性都是基于BeanFactory。BeanFactory与其相关接口,例如BeanFactoryAware,InitializingBean,DisposableBean做为底层组件用来大量的第三方框架与Spring集成。翻译 2016-10-29 13:43:57 · 572 阅读 · 0 评论 -
Spring AOP Redis
大家在项目中应该经常使用到缓存,一般都是先从缓存中拿数据,拿得到就直接返回;拿不到然后才从数据库中获取数据。一般代码都是和业务代码耦合在一起的。那么能不能把缓存的代码抽离开来呢?答案是可以的,看了看Spring Cache的实现,它是基于注解与AOP around通知来实现的。原创 2016-11-12 23:47:34 · 2114 阅读 · 0 评论 -
Spring Container Extension
一般而言,开发者不需要继承ApplicationContext实现类,可以实现特定的集成接口来扩展Spring IoC容器的功能。接下来就描述这些集成接口:翻译 2016-10-16 02:24:28 · 1289 阅读 · 0 评论 -
MyBatis Spring 集成源码解析
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。原创 2016-10-14 00:49:08 · 1821 阅读 · 1 评论 -
Spring AOP 动态多数据源
当项目中使用到读写分离的时候,我们就会遇到多数据源的问题。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。例如在一个spring和Mybatis的框架的项目中,我们在spring配置中往往是配置一个dataSource来连接数据库,然后绑定给sessionFactory,在dao层代码中再指定sessionFactory来进行数据库操作。原创 2016-07-10 19:25:10 · 5031 阅读 · 5 评论 -
Spring 父子容器使用实例
今天被问到一个有意思的问题,就是通过固定的数据源A,动态产生数据源B。其实就是在properties文件中配置数据源A,然后把数据源B用占位。把数据源A查询到的数据动态的替换给数据源B的占位符。知道Spring IOC初始化的小伙伴都知道。替换占位符操作是的操作是在Spring 对象实例化之前进行的。所以常规方法就不能进行这样的操作,就只能应用Spring的父子容器。原创 2016-09-24 01:08:57 · 1854 阅读 · 0 评论 -
Spring 编码过滤 -- 解析Filter实现原理
Spring中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEncoding)即可.但是本文的重点在于Filter的实现原始。原创 2016-06-23 21:34:55 · 8777 阅读 · 3 评论 -
如何下载Spring
Spring无论从安全配置,网络应用以及大数据 – 无论你的的应用程序需求是可能的基础设施,都会有一个Spring项目来帮助你建立它。原创 2016-07-06 20:06:12 · 614 阅读 · 0 评论 -
69道Spring面试题和答案
Spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。转载 2016-05-30 20:13:11 · 928 阅读 · 0 评论 -
Spring Annotaion Support
使用回调接口或注释与自定义实现BeanPostProcessor是一种常见的扩展SpringIoC容器。RequiredAnnotationBeanPostProcessor是Spring的一个例子 —— 一个实现BeanPostProcessor附带的Spring分布,确保JavaBean属性bean上标有一个(任意)注释(配置)会依赖注入值。而且它也是Spring的Annotation的一种实现方式。原创 2016-06-04 03:02:03 · 6436 阅读 · 0 评论 -
Spring IOC
Spring IOC是Spring最重要也是最基础的两个特性之一(别一个是AOP,现不在讨论)。Spring框架的实现控制反转(IoC)的原则,也被称为依赖注入(DI)。过程对象定义它们的依赖关系,也就是说,他们使用的其它对象,只能通过构造函数参数,参数工厂方法或对象实例上设置的属性构造或从工厂回来后的方法。然后容器注入这些依赖项时创建bean。这个过程从根本上是反,因此得名“控制反转(IoC),原创 2016-06-03 14:51:51 · 730 阅读 · 0 评论