![](https://img-blog.csdnimg.cn/4b2592e1355843d58ca4fcda951f5e32.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
spring
文章平均质量分 88
spring基础到源码解析
冬天vs不冷
Java开发工程师,热衷于分享记录当下热门常用的技术,从基础使用到源码解析
展开
-
Spring源码解析(十二):TransactionInterceptor事务拦截器
核心类作用:通过@Transactional注解指定的事务的属性,包括是否只读、超时、回滚等:事务的状态,这个状态分为很多方面,比如事务的运行状态(是否完成、是否被标记为rollbakOnly),事务的同步状态(这个事务是否开启了一个新的同步),还有事务是否设置了保存点。原创 2023-10-10 22:12:50 · 607 阅读 · 0 评论 -
Spring源码解析(十一):spring事务配置类源码
TransactionDefinition默认实现类DefaultTransactionDefinition。@EnableTransactionManagement与@EnableAspectJAutoProxy对比。AbstractTransactionManagementConfiguration抽象父类。ProxyTransactionManagementConfiguration核心配置类。PlatformTransactionManager的实现类。Spring中一共定义了7种事务的传播机制。原创 2023-10-08 17:02:44 · 206 阅读 · 0 评论 -
Spring源码解析(十):spring整合mybatis源码
通过sqlSession获取对应的代理对象代理对象执行sql完成数据库操作// 1.解析XML配置// 2.基于解析好的XML配置创建一个SqlSessionFactory// 3.通过SqlSessionFactory,创建一个SqlSession// 4.获取一个代理对象// 5.调用代理对象的方法System.out.println("代理对象查询结果:" + mapper.selectOne(1));根据@MapperScan注解扫描指定路径下接口。原创 2023-09-02 11:43:00 · 433 阅读 · 0 评论 -
Spring源码解析(九):AOP源码之@Aspect所有相关注解解析
AOP是一种思想,它的实现主要有Spring AOP和AspectJspring AOP底层实现是jdk和cglib动态代理运行期织入借助了AspectJ的语法,即使用了@Aspect @Before @Pointcut等注解来实现AspectJ主要原理是用asm做字节码替换来达到AOP的目的,需要使用专门的编译器ajc编译期、编译期后、类加载期都可以织入AnnotationAwareAspectJAutoProxyCreator主要类图AOP的操作流程都在类中添加注解由@Import注解导入而来。原创 2023-08-29 10:51:59 · 323 阅读 · 1 评论 -
Spring源码解析(八):bean后置处理器CommonAnnotationBeanPostProcessor
查找bean的@Resource属性和@PostConstruct和@PreDestroy方法并缓存起来@Resource注解属性填充初始化前执行解析@PostConstruct注解的初始化方法销毁前执行解析@PreDestroy主键的销毁方法。原创 2023-08-08 22:55:55 · 1037 阅读 · 0 评论 -
Spring源码解析(七):bean后置处理器AutowiredAnnotationBeanPostProcessor
过滤出可以作为构造注入的构造函数列表查找bean的@Autowired @Value属性方法并缓存起来@Autowired @Resource注解属性填充AutowiredAnnotationBeanPostProcessor构造函数autowiredAnnotationTypes 集合中保存了该类会处理的注解autowiredAnnotationTypes 中添加了三个注解@Autowired@Value、和通过反射得到的try {从多个Bean中,筛选出一个符合条件的Bean。原创 2023-08-06 22:01:37 · 1142 阅读 · 0 评论 -
Spring源码解析(六):bean工厂后置处理器ConfigurationClassPostProcessor
类图如下:ConfigurationClassPostProcessor是BeanDefinitionRegistryPostProcessor(bean定义后置处理器父类是BeanFactoryPostProcessor(bean工厂后置处理器根本作用就是解析注解给bean容器添加bean定义@Configuration,@Import,@ComponentScan,@Bean等注解因为有很多后置处理器,通过实现Ordered接口排序执行后置处理器重写的两个重要方法。原创 2023-08-03 14:06:49 · 425 阅读 · 0 评论 -
Spring源码解析(五):循环依赖
简单点说,就是A依赖了B,B依赖的A如果不处理,那么A创建时候需要属性填充B此时B还没有创建,那么去创建B,又需要属性填充A以此形成了死循环A依赖BB依赖A,自然排序,所以先实例化AgetBean(a),先从缓存中获取,没有,则需要去创建实例化A,创建一个对象工厂,可以通过getObje返回刚实例化的A对象,将对象工厂放入三级缓存A属性填充,需要给A中的b属性赋值,则需要getBean(b),先从缓存中获取,没有,则需要去创建。原创 2023-07-26 23:58:08 · 353 阅读 · 0 评论 -
Spring源码解析(四):单例bean的创建流程
接下来说下Spring源码解析(三):bean容器的刷新中最重要的实例化剩余的非懒加载bean进入beanFactory.preInstantiateSingletons();方法} // 创建beanDefinitionNames的副本beanNames用于后续的遍历,以允许init等方法注册新的bean定义 List < String > beanNames = new ArrayList < >(this . beanDefinitionNames);原创 2023-07-22 10:57:38 · 337 阅读 · 0 评论 -
Spring源码解析(三):bean容器刷新
上一讲Spring源码解析(二):bean容器的创建、默认后置处理器、扫描包路径bean主要是刷新上下文的准备工作进入refresh();方法,此方法定义在注解上下文父类AbstractApplicationContext注解配置上下文只是它的子类之一,还有xml上下和web上下文等// 1、刷新前预处理 prepareRefresh();原创 2023-07-21 21:40:36 · 389 阅读 · 2 评论 -
Spring源码解析(二):bean容器的创建、注册默认后置处理器、bean定义扫描类
}//创建注解容器,入参为配置类 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config . class);//获取某个bean Book book = context . getBean(Book . class);//关闭容器 context . close();} }调用ClassPathBeanDefinitionScanner的有参构造方法。原创 2023-07-05 16:52:09 · 738 阅读 · 0 评论 -
Spring源码解析(一):环境搭建
}//创建注解容器,入参为配置类 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config . class);//获取某个bean Book book = context . getBean(Book . class);//关闭容器 context . close();} }原创 2023-07-05 09:30:00 · 474 阅读 · 0 评论 -
Spring之事务
出现了数学运算异常(ArithmeticException),但是我们设置的回滚策略是,当出现ArithmeticException不发生回滚,因此购买图书的操作。【有事务的话,就在这个事务里再嵌套一个完全独立的事务,嵌套的事务可以独立的提交和回滚。【不管有没有,直接开启一个新事务,开启的新事务和之前的事务不存在嵌套关系,之前事务被挂起】在service类中有a()方法和b()方法,a()方法上有事务,b()方法上也有事务。当a()方法执行过程中调用了b()方法,事务是如何传递的?【没有就新建,有就加入】原创 2023-06-27 21:19:03 · 203 阅读 · 0 评论 -
Spring之AOP切面编程
AOP(Aspect Oriented Programming)是一种设计思想,是软件设计领域中的面向切面编程它是面向对象编程的一种补充和完善它以通过预编译方式和运行期动态代理方式实现在不修改源代码的情况下,给程序动态统一添加额外功能的一种技术。原创 2023-06-26 22:17:02 · 734 阅读 · 0 评论 -
Spring之IOC容器
Spring之IOC容器从入门都手写源码原创 2023-06-19 22:26:17 · 875 阅读 · 0 评论 -
Spring之AOP动态代理
代理类,继承目标类,目标类的子类。原创 2022-10-20 17:50:06 · 614 阅读 · 0 评论 -
Spring之Bean的初始化和销毁
代码】Spring之Bean的初始化和销毁。原创 2022-08-05 21:22:40 · 215 阅读 · 0 评论 -
Spring之Aware接口
Aware 接口用于注入一些与容器相关信息。原创 2022-08-05 21:05:45 · 368 阅读 · 1 评论 -
Spring之BeanFactoryPostProcessor(bean工厂后置处理器)
bean工厂后置处理器核心接口在bean调用构造函数,init方法,bean后处理器执行之前执行主要用来对bean定义做一些改变log . debug("BeanFactoryPostProcessor-->bean工厂后置处理器>>>>>>> bean定义之后,实例化之前执行");} } } }BeanFactoryPostProcessor工厂后置处理器子接口。...原创 2022-08-04 23:24:25 · 1333 阅读 · 0 评论 -
Spring之BeanPostProcessor(bean后置处理器)
启动类:添加扫描bean输出结果:2、常用的bean后置处理器接口2.1、初始化-Bean后置处理器BeanPostProcessor是bean后置处理器最底层接口两个方法返回的bean会替换原来的bean初始化阶段在实例化和属性填充之后初始化之前执行:解析注解@PostConstruct、@ConfigurationProperties初始化之后执行:代理增强自定义初始化后置处理器2.2、实例化-Bean后置处理器BeanPostProcessor的扩展接口(子接口)原创 2022-08-03 22:33:06 · 532 阅读 · 0 评论 -
Spring之BeanFactory 与 ApplicationContext 的区别
BeanFactory接口Spring的核心容器,ApplicationContext的父接口表面上只有getBean,实际上控制反转、基本的依赖注入、直至Bean的生命周期的各种功能,都由它的实现类提供ApplicationContext接口主要的ApplicationContext实现都【组合】了它的功能,【组合】是指ApplicationContext的一个重要成员变量就是BeanFactoryApplicationContext新增扩展功能。.........原创 2022-07-27 20:32:05 · 509 阅读 · 0 评论 -
IOC容器加载-深度解析(全集)
文章目录一、基本组件结构介绍二、注解方式IOC容器加载源码解析1、注解方法启动类2、AnnotationConfigApplicationContext 的构造方法2.1、创建bean工厂-beanFactory2.1.1、注册默认后置处理器2.1.2、自定义扫描包功能2.2、注册配置类(Config.class)2.3、容器刷新2.3.1、prepareRefresh();刷新前预处理2.3.2、obtainFreshBeanFactory();获取最新的bean工厂(beanFactory)2.3.3、原创 2021-11-16 23:07:35 · 976 阅读 · 0 评论 -
Bean生命周期(面试版)
实例化后置处理器-实例化前实例化实例化后置处理器-实例化后实例化后置处理器-属性填充(AutowiredAnnotationBeanPostProcessor扫描@autowired注解,完成自动注入)处理Awar接口初始化后置处理器-初始化前三种方式初始化初始化后置处理器-初始化后(会根据情况包装为代理类,即AOP)销毁。原创 2021-11-09 23:05:36 · 10560 阅读 · 1 评论 -
Spring注解驱动
文章目录一、组件注册1、@Scope设置组件作用域2、@Lazy懒加载3、@Conditional按照条件加载bean4、@Import为容器添加组件1)@Import2)@ImprotSelector3)@ImprotBeanDefinitionRegistrar一、组件注册1、@Scope设置组件作用域prototype:多例,ioc容器启动并不会去调用方法创建对象放在容器中。每次获取的时候才会调用方法创建对象。singleton:单例(默认值),ioc容器启动会调用方法创建对象方到容器中。每原创 2021-11-08 23:50:41 · 482 阅读 · 0 评论 -
bean的生命周期
一、流程图二、各环节介绍spring管理bean,通过反射找到构造方法,实例化bean对象Bean实例化后对将Bean的引入和值注入到Bean的属性中BeanNameAware.setBeanName(),获取设置bean的名称BeanFactoryAware.setBeanFactory(),获取BeanFactory容器实例即获取beanApplicationContextAware.setApplicationContext(),获取bean所在应用上下文引用BeanPostProc原创 2021-09-14 21:19:53 · 97 阅读 · 0 评论 -
spring事务
一、什么是事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。二、事务的特性(ACID)原子性:确保动作要么全部完成,要么完全不起作用一致性:一旦所有事务动作完成,事务就要被提交。数据保持一致性隔离性:多个事务会同时处理相同的数据,每个事务都应该隔离开,防止数据损坏持久性:事务一旦完成,无论系统如何,结果不受影响,事务结果持久化到硬盘中三、基于xml配置文件方式 <!-- 1.配置事务的管理器 --> <bean id="tran原创 2021-07-31 17:44:54 · 100 阅读 · 0 评论 -
spring整合mybatis
一、第一种方法实体、接口、xml-sql都一样@Datapublic class User { private int id; private String name;}public interface UserMapper { List<User> getUserList();}<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//myba原创 2021-07-31 01:13:55 · 80 阅读 · 0 评论 -
IOC和AOP理解
IOC1、控制:传统应用系统自己创建对象,使用spring后,由容器统一创建管理;2、反转:程序不创建对象,被动接收对象,由调用者决定。如:A对象依赖B对象,传统应用需要在A内部new B对象,使用spring后,通过依赖注入灵活调用这里用到了多态。依赖注入(DI):当某个角色(可能是一个实例,调用者)需要另一个角色(另一个java实例,被调用者)的协助时,传统设计由调用者来创建被调用者的实例。但在spring中,由容器创建依赖注入调用者。三种方式:构造方法、set、注解注解@Resource原创 2021-07-16 23:21:35 · 241 阅读 · 0 评论