概述
1.FactoryBean 与BeanFactory的区别:
FactoryBean是工厂bean.用户可以通过实现接口定制实例化Bean的逻辑。
BenaFactory是管理Bean的一个工厂,在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
2.spring 容器的启动流程
调用AbstractApplicationContex的refresh()方法
refresh中主要流程:
一:初始化
二:创建BeanFactory
三:实例化 bean工厂的后置处理器(BeanFactoryPostProcessor)
四:实例化bean的后置处理器(BeanPostProcessors)
五:加载事件监听器initMessageSource
六:创建事件监听器上下文对象
七:初始化其他特殊bean
八:注册监听器
九:创建所有事单例的bena
十:初始化完成并发布
比较核心的步骤标红,后面再看要不要整理
3.bean的创建过程
一:先从缓存中获取当前bena,如果能获取到说明bean是之前就创建过的,直接使用,否则在创建,重建完成后会将bean缓存起来
二:检查并确保初始化bean前所依赖的bean已经初始化同样调用AbstractBeanFactory.doGetBean
三:基于BeanPostProcessors检查是否对bean进行前置和后置增强如果需要则直接返回增强后的代理对象(AOP)
1:判断当前bean是否在advisedBeans中(保存了所有需要增强bean)
2:获取候选的增强器(切面里面的通知方法)
3:获取到能在bean使用的增强器并对增强器排序
4:保存到proxyFactory,并创建代理对象
四:否则doCreateBean
1:使用bena的构造方法创建bean实例(基于反射)返回一个BeanWrapper对象
2:判断是需要基于后置处理器修改bean定义
3:执行bean的init方法
4:将bean加入到IOC容器中DefaultSingletonBeanRegistry.disposableBeans(Map<String, Object> )
5:返回bean的实例
4.spring 中事务原理:
1)、@EnableTransactionManagement
利用TransactionManagementConfigurationSelector给容器中会导入组件
导入两个组件
AutoProxyRegistrar
ProxyTransactionManagementConfiguration
2)、AutoProxyRegistrar:
给容器中注册一个 InfrastructureAdvisorAutoProxyCreator 组件;基本的动态代理创建器
InfrastructureAdvisorAutoProxyCreator:?
利用后置处理器机制在对象创建以后,包装对象,返回一个代理对象(增强器),代理对象执行方法利用拦截器链进行调用;
3)、ProxyTransactionManagementConfiguration 做了什么?
1、给容器中注册事务增强器;
1)、事务增强器要用事务注解的信息,AnnotationTransactionAttributeSource解析事务注解
2)、事务拦截器:
TransactionInterceptor;保存了事务属性信息,事务管理器;
他是一个 MethodInterceptor;
在目标方法执行的时候;
执行拦截器链;
事务拦截器:
1)、先获取事务相关的属性
2)、再获取PlatformTransactionManager,如果事先没有添加指定任何transactionmanger
最终会从容器中按照类型获取一个PlatformTransactionManager;
3)、执行目标方法
如果异常,获取到事务管理器,利用事务管理回滚操作;
如果正常,利用事务管理器,提交事务
最后
以上就是平常口红为你收集整理的spring知识点整理的全部内容,希望文章能够帮你解决spring知识点整理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复