Spring
2022-06-05 16:54:51 0 举报
AI智能生成
Spring相关技术栈
作者其他创作
大纲/内容
3.Spring Framework
1、核心模块源码
1、 spring-core
1、ClassPathXmlApplicationContext
2、AnnotationConfigApplicationContext
1、核心组件
1、BeanDefinitionRegistry
2、IOC
1、Bean 注入流程
1、ApplicationContext
1、AnnotationConfigApplicationContext
1、调用父级 GenericApplicationContext 构造函数
2、调用本类构造函数实例化BeanDefinition
1、AnnotatedBeanDefinitionReader
1、设置当前环境信息
2、ClassPathBeanDefinitionScanner
1、设置当前环境信息 与 DefinitionReader 类似
3、调用refresh()刷新Bean
1、prepareRefresh 准备上下文环境
1、设置基本环境(状态,时间)
2、initPropertySources
3、校验本环境下必须的参数配置信息
4、earlyApplicationListeners 存储前期程序监听
5、初始化前期程序事件 earlyApplicationEvents
2、obtainFreshBeanFactory 获取告诉子类初始化Bean工厂
1、刷新Bean工厂 refreshBeanFactory
1、获取Bean工厂序列化ID
2、将BeanFactory存储 serializableFactories
2、获取Bean工厂
3、prepareBeanFactory 对bean工厂进行填充属性
1、初始化类加载器 ClassLoader
2、加载标准表达式解析器 StandardBeanExpressionResolver
3、加载资源编辑器 ResourceEditorRegistrar
4、加载前置后置处理器 ApplicationContextAwareProcessor
5、忽略给定接口的自动装配功能 ignoreDependencyInterface
1、EnvironmentAware
2、EmbeddedValueResolverAware
3、ResourceLoaderAware
4、ApplicationEventPublisherAware
5、MessageSourceAware
6、ApplicationContextAware
6、注册有冲突(多个)实例的Bean registerResolvableDependency
1、BeanFactory
2、ResourceLoader
3、ApplicationEventPublisher
4、ApplicationContext
7、加载后置处理器 ApplicationListenerDetector
8、织入Bean的场合
1、加载前置后置处理器 LoadTimeWeaverAwareProcessor
2、设置临时类加载器 ContextTypeMatchClassLoader
9、没有注册环境Bean的场合
1、注册环境Bean
10、没有注册配置Bean的场合
1、注册配置Bean
11、没有注册系统环境Bean的场合
1、注册系统环境Bean
4、postProcessBeanFactory 留个子类去实现改接口
5、invokeBeanFactoryPostProcessors调用我们的Bean工厂的后置处理器
1、获取Bean工厂前后置处理器 getBeanFactoryPostProcessors
2、invoke Bean工厂前后置处理器 invokeBeanFactoryPostProcessors
1、如果beanFactory是BeanDefinitionRegistry
1、遍历所有的前后置处理器
1、如果前后置处理器为BeanDefinitionRegistryPostProcessor类型
postProcessBeanDefinitionRegistry
2、getBean
1、doGetBean
1、transformedBeanName 别名转换
2、getSingleton 尝试缓存中获取Bean
3、获取为空的场合
1、getParentBeanFactory 获取父容器
2、父容器获取的场合
3、getMergedLocalBeanDefinition
4、checkMergedBeanDefinition
5、获取DependOn 依赖Bean的名称
1、存在的场合
1、isDependent
2、registerDependentBean
3、getBean 获取DependOn Bean
6、创建单例bean
getSingleton
1、this.singletonObjects.get(beanName)
2、beforeSingletonCreation
3、singletonFactory.getObject()
1、createBean
1、resolveBeanClass
2、prepareMethodOverrides
3、resolveBeforeInstantiation
4、doCreateBean
4、afterSingletonCreation(beanName)
5、addSingleton
6、registerBeanPostProcessors 调用Bean的后置处理器
7、initMessageSource 初始化国际化资源
8、initApplicationEventMulticaster 创建事件多播器
9、onRefresh 这个方法同样也是留给子类实现的 SpringBoot 也是从这个方法启动tomcat的
10、registerListeners把事件监听器注册到多播器上
11、finishBeanFactoryInitialization 实例化剩余的单实例bean
12、finishRefresh 最后容器刷新 发布刷新事件(Spring Cloud 也是从这里启动的)
2、原理
1、概述
控制反转
1、控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理
2、使用 IOC 目的:为了耦合度降低
2、底层原理
1、xml解析
2、工厂模式
3、反射
3、AOP
1、织入切面的方式
1、编译期织入
2、类加载期织入
3、运行期织入
4、特点
1、方便解耦
2、简化开发
3、aop编程的支持
4、方便程序测试
5、方便和其它框架继承
6、声明式事务,方便事务管理,降低api的开发难度
5、事务
1、概述
事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操 作都失败
2、特性 ACID
1、原子性
不可分割
2、一致性
操作之前和操作之后总量不变
3、隔离性
多事务操作不影响
4、持久性
持久化
3、方式
1、编程式事务管理
2、声明式事务管理
1、注解
@Transactional
1、概述
加在方法上,则该方法开启事务
加载类上,则该类的所有方法开启事务
2、传播性 propagation
1、REQUIRED
如果有事务,则当前方法在该事务中运行,如果没有事务,则创建事务
2、REQUIRED_NEW
无论是否有事务都会创建新的事务,有事务将会把事务挂起
3、SUPPORTS
如果有事务则在事务中运行,没有事务则不在事务中执行
4、NOT_SUPPORTED
当前方法不应该在事务中运行,如果有,则将事务挂起
5、MANRORY
当前方法必须在事务中运行,如果没有则抛出异常
6、NEVER
当前方法不应该在事务中运行,如果存在则抛出异常
7、NESTED
如果有事务在运行,当前方法应该在嵌套的事务中运行,如果没有就开启一个新事务,并在自己的事务中运行
3、事务隔离级别 ioslation
1、概述
事务有特性成为隔离性,多事务操作之间不会产生影响。不考虑隔离性产生很多问题
2、不考虑隔离性,并发事务的场合问题
1、脏读
2、不可重复读
3、虚(幻)读
4、timeout 超时时间
5、readonly 是否只读
6、rollbackFor 回滚
7、noRollbackFor 不回滚
2、xml配置
4、原理
AOP
5、事务管理API
TransactionManager
0 条评论
下一页