spring
文章平均质量分 82
liaokunxian
记录在学习过程中的一些笔记和总结
展开
-
Spring循环依赖图解
循环依赖的情况如下所示A依赖B,B依赖A,形成了循环的依赖class A { B b; }class B { A a; }在Spring中AOP是很常用的,被AOP切入的Bean,最后生成的是被代理的BeanSpring解决循环依赖的前提Bean是单例的不全是构造器注入Bean循环依赖的三级缓存我们都知道Spring使用了三级缓存来解决了循环依赖,但是他们的具体流程必须要懂获取Bean的过程所有的Bean的获取都是通过BeanFactory中的getBean原创 2021-03-17 17:17:41 · 486 阅读 · 0 评论 -
Srping MVC处理HTTP请求过程
背景首先,我们要知道通过HTTP请求访问Java后端程序,其实就是访问Servlet,我们编写的Servlet程序部署在实现了Servlet规范的Java Web服务器上,比如我们最常用的Tomcat服务器,它会接收浏览器发过来的HTTP请求,然后将请求转发到对应的Servlet中,在Servlet中对请求进行业务逻辑处理后,将结果返回。Servlet的访问过程访问顺序如下: Tomcat->ApplicationFilterChain->Filter-1->Filter-2->原创 2021-01-28 00:00:55 · 151 阅读 · 0 评论 -
Spring MVC初始化过程-源码解析
背景在SpringMVC项目配置中,我使用了xml的方式来启动SptingMVC对声明式注解的支持,其中使用如下标签进行启动<!--支持注解方式声明@Controller--> <mvc:annotation-driven />因为解析配置文件过程中,需要对其中的标签进行解析,而这里使用的是自定义标签,则需要有对应相关的处理器和解析器标签解析过程 <mvc:annotation-driven />解析自定义标签MvcNamespaceHandler因原创 2021-01-25 11:11:52 · 198 阅读 · 0 评论 -
Spring MVC项目配置
背景现在流行使用SpringBoot项目来开发Web项目,只要添加以下依赖即可拥有开箱即用的SpringMVC的开发环境。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency&g原创 2021-01-16 22:53:45 · 277 阅读 · 0 评论 -
Spring事务执行过程-TransactionInterceptor-源码解析
背景因为Spring声明式事务是通过AOP增强实现的,所以现在具体来分析一下Spring事务的执行过程,因为AOP是通过拦截器执行链实现的,所以我们可以把关注点聚焦在拦截器上-TransactionInterceptor事例 @Transactional public void insertUser(String name,int age){ userMapper.insertUser(name,age); } @Test public void原创 2021-01-13 23:28:21 · 777 阅读 · 0 评论 -
Spring事务传播级别REQUIRED和NOT_SUPPORTED测试
背景Spring为了让在同一个方法下处理不同的事务,于是有了事务传播级别REQUIRED当前线程没有事务,会新建一个事务,如果存在事务,则使用该事务NOT_SUPPORTED当前线程存在事务,挂起当前事务,执行完后,恢复挂起的事务事例测试同一个声明式事务下的REQUIRED和NOT_SUPPORTEDTestPropagationpublic class TestPropagation { private UserService userService; /**原创 2021-01-12 18:42:05 · 13822 阅读 · 6 评论 -
Spring事务的启动过程-源码解析
背景Spring使用声明式让我们无需关系事务的复杂逻辑处理,只要添加注解@Transactional即可为业务添加事务支持如何启用Spring事务注解方式@EnableTransactionManagement还需要加@Configuration使用注解方法启动必须使用基于注解的容器启动,这里就不列出例子了 //基于注解的容器 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(原创 2021-01-08 10:11:49 · 235 阅读 · 0 评论 -
Spring Bean加载过程
加载的时机非懒加载在refresh()的finishBeanFactoryInitialization()进行加载懒加载第一次调用beanFacoty.getBean()进行加载执行getBean()加载getBean()doGetBean()transformedBeanName(beanName)获取真正的BeanName 可能有别名从缓存获取getSingleton(beanName)从缓存中获取getObjectForBeanInstan原创 2021-01-06 18:27:11 · 361 阅读 · 0 评论 -
Spring IoC容器初始化过程
Spring IoC容器概述IoC容器和依赖反转模式如果合作对象的引用或依赖关系的管理由具体对象来完成,会导致代码的高度耦合和可测试性的降低,这对复杂的面向对象系统的设计是非常不利的。在Spring中,IoC容器是实现这个模式的载体,它可以在对象生成或初始化时直接将数据注入到对象中,也可以通过将对象的引用注入到对象数据域中的方式来注入对方法调用的依赖。这种依赖注入是可以递归的,对象被逐层注入。如何翻转依赖的控制把控制权从业务对象手中转交到平台或者框架中,是降低面向对象系统设计复杂性和提高面向对原创 2021-01-06 15:59:51 · 268 阅读 · 0 评论 -
Spring AOP初始化及执行过程-源码解析
背景当对不同的没有继承关系的对象引入一些公共的行为,比如记录日志,校验安全等,需要编写重复的代码,对一个系统的可维护性来说是非常不友好的,于是,引入了面向切面编程AOP不同于面向对象编程所关注的纵向编程,AOP所关注的是横向编程,为不同的对象方法织入切面切点 Point决定通知作用于哪些连接点通知 Advice决定在连接点做什么,为切面增强提供织入接口通知器 Advisor用于结合Point和AdviceSpring AOP 使用aspectj支持AOP在xml原创 2021-01-05 19:49:21 · 991 阅读 · 6 评论