spring-spark

spring-spark_第1张图片

spring-spark_第2张图片

 spring-spark_第3张图片

spring-spark_第4张图片 spring-spark_第5张图片

Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:

spring 中事务是一个会话一次事务
在加有事务的类中启用线程,线程不会重新开启新的事务而是与当前类共用事务。事务的提交也是一起进行。只有那个主线程才有事务。
spring 的事务是通过LocalThread来保证线程安全的,事务和当前线程绑定, 搞了多个线程自然会让事务失效。

 Spring中DAO和Service都是以单实例的bean形式存在,Spring通过ThreadLocal类将有状态的变量(例如数据库连接Connection)本地线程化,从而做到多线程状况下的安全。
 在一次请求响应的处理线程中, 该线程贯通展示、服务、数据持久化三层,通过ThreadLocal使得所有关联的对象引用到的都是同一个变量。

 spring允许修改初始化的过程
 
 AnnotationConfigApplicationConetx初始化spring(通过注解)
 ClassPathXmlApplicationContext初始化spring(通过xml)
 
 AnnotationConfigApplicationContext annotationConfigApplicationContext =
                new AnnotationConfigApplicationContext(入口类.class(比如扫描的包));  构造方法
 
 this.register(annotatedClasses);这个步骤有七个创世纪类、加上自定义入口类
 
 refresh()方法,最重要的方法,调用了12个方法,中的invokeBeanFactoryPostProcessors方法,扫描类(可以calss文件,反射得到),处理各个import 。生成各个RootBeanDefinition(每个类的定义与普
 通class对象不太一样,存储信息更多,比如多了class中没有的scope多例是否,lazy懒加载),再放到map中(map中key是beanName,而且这个beanName都放到一个list中)。遍历,初始化后生
 成calss后,放到spring单例池中(singleHashMap对象,不是spring容器,只是spring容器的一部分,它里面的对象是走完spring生命周期的bean(不是对象))。
 实现BeanFactoryPostProcessor这个接口,就可以自定义修改默认RootBeanDefinition的信息(比如,把其中对象的class对象,可以换成别的类,偷梁换柱)。当然自定义的和默认的都会执行。
 再preInstantiateSingletons new Objec
 
 spring会执行每个实现BeanFactoryPostProcessor这个接口的所有子类
 
 this.finishBeanFactoryInitialization(beanFactory);这个方法,完成bean的实例化:内部方法中beanFactory.preInstantiateSingletons()(触发所有非延迟加载单例beans的实例化);
 实例化。过程中可能会有多次getBean(判断既不是已经创建好了又不是创建中,然后各种判断有父容器没等等,然后开始创建,再getBean)
 
 因为bean有循环依赖,所有实例化对象有个中间状态。循环依赖,需要的只是对象,不是bean
 
 bean和对象最大的区别是:bean有完整的spring周期
 例如:A依赖B,B依赖A
 流程:创建B--->new--->对象--->Aop---->lifeclycallback---->自动注入------xxxxx  这个时候bean才是完成了       
 对象生成后的步骤是可选的,有的bean没有,那就跟普通对象没区别了
 
 
 
 
 
 
 AbstractApplicationContext
 
 spring上下文:是指所有组件集合,比如:RootBeanDefinition、BeanFactoryPostProcessor
 虚线不一定执行
 spring工厂:创建bean
 
 factoryBean:特殊bean,开天辟地的bean
 spring支持循环依赖,bean要是单例的。当然要是不是单例的,就需要加lookup-method和replace-method使用
 
 spring后置处理器,分功能,只是所有的后置处理器都继承了BeanPostProcessor(postProcessBeforeInitialization、postProcessAfterInitialization只有
 这两个方法),spring中起码有几十个类实现了这个接口,
 比如:自动注入、Aop就是由实现了BeanPostProcessor的子类来实现的(有自己的特殊方法)。基本上不同的子类,实现不同的功能,在spring的过程中
 
 比如:aop的后置处理器子类,执行完后返回一个代理子类对象(也可以自定义,不过要实现接口)

 初始化后spring会执行每个实现BeanPostProcessor这个接口的所有子类,来插手bean的初始化过程,不是实例化过程
 
 实例化----整个过程(包括初始化)
 初始化-----当对象new出来之后的事

你可能感兴趣的:(web初级)