关键字:实例化--初始化
1.实例化Bean对象,通过反射的方式获取对象,在底层源码里面有一个CreatBeanInstance的方法,用来创建对象;
2.创建对象后,对象的属性都是默认值,通过popluateBean来给对象填充属性;
3.给Bean对象赋予容器属性,需要通过invokeAwareMethdos方法来把容器属性注入给Bean对象;
4.通过BeanPostProcessor前置方法,来做一些扩展工作;例如ApplicationContextProxyCeartor;
5.初始化Bean对象,通过invokeinitMehods方法来初始化对象,执行之前需要判断是否实现了initalizingBean接口,然后执行afterpropertisSet方法;
6.通过BeanPostProcessor后置方法,来处理一些后置工作,aop就是在此实现的,实现的接口名称是AbstractAutoProxyCeartor;
7.拿到完整的对象后,通过getBean获取到了对象和处理;
8.对象使用完毕后,在容器关闭时,会摧毁对象,然后判断是否实现了DispoableBean接口,然后执行DestoryMethods方法;
工厂模式;
单例模式;
适配器模式;
装饰者模式:
观察者模式;
模板方法:
建造者模式;
spring的事务是通过aop实现的,首先生成具体的代理对象,然后按照aop的整套流程来实现具体逻辑,一般情况下都是通过 通知 来完成核心功能,但是spring的事务不一样,他是通过TranstactionInterceptor来实现的,通过调用invoke方法来实现具体逻辑.在执行过程中,如果执行失败了,会通过completeTransactionAfterThrowing来实现回滚操作,然后会通过doRollback来实现具体逻辑,回滚也需要先获取连接对象,通过连接对象来回滚;