spring-源码解析

spring 源码解析未完陆续更新…
AOP
cglib动态代理
是针对类实现代理。
实现接口MethodInterceptor
jdk动态代理
只能对实现接口的类生成代理,而不能针对类
实现接口InvocationHandler
使用Proxy创建代理对象
IOC
bean的加载
getbean(name)加载流程
1、转换对应的beanName
2、尝试从缓存中加载
Map singletonObjects
本地缓存单例对象的beanName+bean对象(初始状态的bean)
Map earlySingletonObjects (当前创建bean池)
当前创建bean池 本地缓存 单例对象的beanName+bean对象(初始状态的bean)
Map> singletonFactories
本地缓存和当前创建bean池中没有则从本地缓存获取ObjectFactory,然后生成bean对象
3、bean的实例化
getObjectForBeanInstance
对Factorybean正确性进行校验
不处理非FactoryBean对象
缓存中获取对象最终的bean对象
Map factoryBeanObjectCache
getObjectFromFactoryBean
1、factory.getObject()
2、ObjectFactory的后处理器
postProcessObjectFromFactoryBean
4、原型模式的依赖检查
5、检测parentBeanFactory
6、将存储Xml配置文件的GernericBeanDefinition 转换为RootBeanDefinition
7、寻找依赖
8、针对不同scope进行bean的创建
9、类型转换
创建bean对象的方式
反射Class clazz clazz.newInstance();
不需要动态覆盖或者动态替换的类直接使用反射
cglib
需要动态覆盖或者动态替换的类使用cglib生成
循环依赖
定义
如果两个或多个bean相互之间持有对方,则他们最终反应为一个环
解决循环依赖
prototype范围的依赖处理
多例情况不会出现循环依赖
构造器循环依赖 - constructor-arg-当前创建bean池”
setter循环依赖-暴露ObjectFactory方式解决
单例作用域
初始化bean的方式
实现接口InitaliazingBean接口,并在afterProptertiesSet方法中初始化业务逻辑
init-method
销毁bean
destroy-method
注册后处理器DestrunctionAwareBeanPostProcessor
激活Aware方法
BeanFactoryAware接口
注入beanFactory实例获取bean对象
ApplicationContextAware接口
注入ApplicationContext实例获取上下文信息
ResouceLoaderAware接口
ServletContextAware接口

处理器
数据库
jdbc
整合mybatis
事务
spring MVC
JMS
ActiveMQ
远程服务
RMI
http invoker

你可能感兴趣的:(spring基础)