
Spring
文章平均质量分 96
架构攻城之路
敢拒绝,还有梦。
有qian,有闲,有成长;
有你,也有我。
展开
-
【Spring源码:循环依赖】一文弄懂Spring循环依赖
1. 什么是循坏依赖很简单,其实就是互相依赖对方,比如,有一个A对象依赖了B对象,B对象又依赖了A对象。// A依赖了Bpublic class A{ private B b;} // B依赖了Apublic class B{ private A a;}但是,在我们普通的java开发中,循坏依赖会出现问题吗?如果不考虑Spring,循环依赖并不是问题,因为对象之间相互依赖注入是很正常的事情。比如:这样,A,B就互相依赖上了。但是,在Spring原创 2021-01-15 09:32:19 · 2180 阅读 · 2 评论 -
【Spring源码:AOP二】基于JDK动态代理和Cglib创建代理对象的原理分析
上一篇,我们最后通过一个例子讲解了resolveBeforeInstantiation()中,通过InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation返回一个代理对象,下面,我们继续分析这个方法返回的是null的情况,那么它就会往下执行doCreateBean()。 @Override protected Object createBean(String beanName, RootBeanDefinition mbd,原创 2021-01-14 10:58:01 · 277 阅读 · 0 评论 -
【Spring源码:AOP一】基于JDK动态代理和Cglib创建代理对象的原理分析
本文直接进入正题,从AOP代理对象创建器说起。AOP代理对象创建器:AspectJAwareAdvisorAutoProxyCreator其中,InstantiationAwareBeanPostProcessor接口是BeanPostProcessor接口的子接口,主要作用:为特殊定制目标bean的实例化过程,如给目标对象创建代理对象。BeanPostProcessor接口,即bean后置处理器,作用是在Bean对象在实例化和依赖注入完毕后,在显示调用初始化方法的前后添加我们自己的逻辑.原创 2021-01-14 09:51:25 · 860 阅读 · 4 评论 -
惊人!Spring5 AOP 默认使用 CGLIB ?从现象到源码的深度分析
Spring5 AOP 默认使用 Cglib 了?我第一次听到这个说法是在一个微信群里: 群聊天真的假的?查阅文档刚看到这个说法的时候,我是保持怀疑态度的。大家都知道 Spring5 之前的版本 AOP 在默认情况下是使用 JDK 动态代理的,那是不是 Spring5 版本真的做了修改呢?于是我打开 Spring Framework 5.x 文档,再次确认了一下:文档地址:https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-f转载 2021-01-04 12:07:43 · 347 阅读 · 0 评论 -
【Spring源码:FactoryBean二】终于弄懂FactoryBean是如何自定义bean的创建过程了
引言我们在上一篇文章中我们着重分析了FactoryBean中getObjectType方法的流程,最后还画了一个大概的流程图,描述了我们传入的class类型(IOrderService.calss)与我们自定义的FactoryBean子类之间如何关联起来的,即我们调用getBean(IOrderService.class),底层最终会调用factoryBean.getObjectType()。这一篇文章我们将分析FactoryBean是如何让Spring容器管理调用它的getObject()原创 2020-12-26 14:59:41 · 894 阅读 · 4 评论 -
【Spring源码:FactoryBean一】终于弄懂FactoryBean是如何自定义bean的创建过程了
引言我们在日常JavaWeb开发,应该都见过或使用过FactoryBean这个类,很多人估计都没弄懂它和BeanFactory的区别,亦或者是在面试时,可能都会被问到Spring中BeanFactory和FactoryBean的区别。或许我们很多人都没自定义去扩展使用过FactoryBean,但是可以回顾下在哪些框架中有应用到它?例如:Feign的 FeignClientFactoryBean,spring-mybatis的MapperFactoryBean等都是扩展实现了Spring的Factory原创 2020-12-25 16:00:16 · 2049 阅读 · 3 评论 -
【Java反射实战】手写实现一个Spring IoC
手动实现一个简单的Spring IoC容器,管理Bean1、方式一:简单版,初始化时,手动new 再设置进hashMapkey:接口的class value:实现类的实例测试:直接从通过key名从HashMap获取2、方式二:改进版,通过配置文件+反射,初始化bean配置文件内容:接口=实现类通过类加载器读取配置文件内容,再反射实例化,设置进HashMap3、方式三:注解+扫描 类路径下的所有文件(接口+实现类),反射实例化,放到一个H...转载 2020-12-11 15:02:19 · 593 阅读 · 0 评论 -
【面试题】Spring IoC与DI、自动装配与循环依赖
Spring IoC是Spring最经典设计,自动装配是IoC注入“自动化”的一个简化配置操作。尽管IoC注入帮我们管理了对象之间的依赖关系,但是仍可能发生设计不当而导致了循环依赖问题。强大Spring也提供了一些优雅的解决方案。目录什么是IoCIoC与控制反转如何理解IoC容器IoC注入方式优缺点比较自动装配装配方式循环依赖解决办法什么是IoCSpring IoC容器负责对象的生命周期和对象之间的(依赖)关系。在创建新的Bean时,IoC容器会自动注入新B转载 2020-11-05 09:52:28 · 552 阅读 · 0 评论 -
【面试题】Spring中bean的生命周期,Spring的DI与IoC的区别
四个主要阶段Spring bean的生命周期只有四个主要阶段,其他都是在这四个主要阶段前后的扩展点,这四个阶段是:1.实例化 Instantiation2.属性赋值 Populate3.初始化 Initialization4.销毁 Destruction其中实例化和属性赋值分别对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段。可通过查源码的方式发现,他们都在doCreate()方法中,// 忽略了无关代码protected Object doCr...转载 2020-11-04 09:28:40 · 920 阅读 · 0 评论 -
Spring IoC是如何进行依赖注入的?依赖注入的方式
依赖注入(DI)DI(Dependency Injection),Spring IoC 不是一种技术,而是一种思想,通过这种思想,能够指导我们设计出松耦合的程序代码。而Spring IoC这个思想的作用体现在两个方面,一是如何将Bean装配到容器中去以及如何从容器中获取Bean,二是如何解决Bean之间的依赖关系,换句话说,就是如果由IoC容器来管理依赖关系,当一个Bean需要依赖另外一个Bean时,IoC容器如何实现这样的依赖关系。解决Spring中Bean之间的依赖的实现方式,在Sprin...转载 2020-08-13 17:51:36 · 1109 阅读 · 0 评论 -
Spring中同一个service中方法相互调用事务不生效问题解决方案
问题描述:我们在用Spring框架开发Web项目过程中,经常需要用同一个service中的一个方法调用另一个方法,如果此时调用方没有添加事务注解@Transactional,而在被调用方添加事务注解@Transactional,当被调用方法中出现异常,这时候会发现事务并没有回滚,事务注解@Transactional没有起作用。分析原因:我们知道Spring中事务管理是使用AOP代理技术实现的,目标对象自身并没有事务管理功能的,而是通过代理对象动态增强功能对事务进行增强的。因此当我们在同一个ser转载 2020-07-20 18:11:06 · 7722 阅读 · 0 评论 -
《Spring系列一》-Spring与tomcat的不解之缘
在web后端开发中,Spring无疑是龙头的老大。那么Spring是如何与tomcat容器关联起来的,本篇文章将讲述Spring容器是如何绑定到tomcat中的。ServletContextListener该接口是Servlet包中的接口,在Tomcat启动时会执行该接口对象的contextInitialized(ServletContextEvent sce)方法,当Tomcat关闭...转载 2020-04-23 09:39:10 · 735 阅读 · 0 评论 -
spi的初步认识
spi一般都是官方定义好一个规则,硬件厂家根据这个接口定义的规则,结合自己产品的情况给出对应的实现,所以不同的厂家会有不同的实现,这就使得我们使用者的使用的难度加大。spi的出现解决了这一问题,我们只需要给出对应的配置参数,就能通过接口获取到对应的实现类对象。下面这段代码是一个spi的简单实现,使用的是jdk封装好的ServiceLoader,首先定义一个接口:public int...转载 2020-01-09 15:35:08 · 201 阅读 · 0 评论 -
面试必问:Spring循环依赖的三种方式
引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错。下面说一下Spring是如何解决循环依赖的。第一种:构造器参数循环依赖Spring容器会将每一个正在创建的Bean 标识符放在一个“当前创建Bean池”中,Bean标识符在创建过程中将一直保持在这个池中。因此如果在创建Bean过程中发现自...转载 2020-01-09 09:52:38 · 313 阅读 · 0 评论 -
Spring在xml配置里配置事务
事先准备:配置数据源对象用<bean>实例化各个业务对象。1.配置事务管理器<bean id="transactionManager" class="org.springframework.jdbc.datasourceManager"> <property name="datasource" ref="datasource"></pro...转载 2020-01-07 14:07:21 · 521 阅读 · 0 评论 -
开发多年,你知道Spring如何在一个事务中开启另一个事务吗?
上面提到的情景可能不常见,但是还是会有的,一旦遇到,如果业务比较复杂,就会很麻烦,但是还是有解决的方案的,比如将一个service方法拆成两个方法,也就是将两个操作的事务分开,但是这只适用与业务比较简单的,如果出现多次数据库的写操作,而我们调用的系统只需要其中一个写操作的最新数据,如果我们将它分开,那么如果调用目标系统出现异常的时候,那么之前的写操作就不能回滚了。举个简单的例子:@Ser...转载 2020-01-07 14:54:56 · 691 阅读 · 0 评论 -
Spring事务失效的 8 大原因,这次可以吊打面试官了!
1、数据库引擎不支持事务这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB。根据 MySQL 的官方文档:https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html从 MySQL 5.5.5 开始的默认存储引擎是:...转载 2020-01-07 15:04:09 · 1381 阅读 · 0 评论 -
Spring的核心思想你了解多少?揭秘Spring依赖注入的神秘面纱
依赖注入是面型接口编程的一种体现,是Spring的核心思想。事实上依赖注入并不是什么高深的技术, 只是被Sping这么以包装就显得有些神秘。classMain{interfaceLanguage{voidprint(String s);}staticclassJavaimplementsLanguage{@...转载 2020-01-07 16:42:16 · 269 阅读 · 0 评论 -
Spring启动流程(原理)详解--结合web.xml加载配置分析
注:文章内容有点多,可以先总体大概浏览一遍,心中有个整体类目关系构图,再详细看,不至于迷失在细节中,最好本地也使用开发工具打开源码对着看。引言:Spring框架已经成为目前JavaEE企业应用的主流框架,它提供了一个全面的编程和配置模型,适用于任何类型的部署平台。Spring的一个关键元素是应用程序级别的基础设施支持:Spring专注于企业应用程序的“管道”,这样我们开发人员就可以...原创 2019-08-06 17:04:18 · 5127 阅读 · 4 评论 -
Spring循环依赖的三种方式
引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错。下面说一下Spring是如果解决循环依赖的。第一种:构造器参数循环依赖Spring容器会将每一个正在创建的Bean 标识符放在一个“当前创建Bean池”中,Bean标识符在创建过程中将一直保持在这个池中,因此如果在创建Bean过程中发现自己已...转载 2019-08-05 09:17:39 · 204 阅读 · 0 评论