Spring源码分析
2021-10-24 23:42:50 29 举报
Spring源码分析
作者其他创作
大纲/内容
依赖注入(DI
抽象类
BeanFactoryPostProcessor对配置文件的${}进行替换PropertySourcesPlaceholderConfigurer
有实现接口JDK动态代理
初始化前
Bean
Spring
作者:Java小王 日期:2021-10-24版本:V1.0
推断构造
给对象的属性赋值判断有没有@AutoWired注解构造赋值或者set方法populateBean赋值或者实现Aware接口invokAwareMethods方法
ProxyCreatorSupport下的createAopProxy()
ClassPathXmlApplicationContext
实现InitializingBean接口重写afterPropertiesSet()方法,如果对象实现了该接口重写里面的方法也会在启动时执行
创建对象
1.属性赋值(DI)2.执行初始化方法3.对创建好的bean进行扩展工作
一个无参一个有参(走无参)
Spring中的Bean按照使用者来分类的话
@ComponentScan(com.xxx)
多个构造没有无参也没有任何注解直接报错@NoSearchConstructionMethod
入口
ProxyFactory代理工厂接口getProxy()
具体实现
模板方法
BeanFactory
对BeanFactory进行扩展实现
ApplicationContextBeanFactoryEnvironmentMessageSource(i18n)ResourceLoader
@Service@Controller@Component@Bean
BeanDefinition(接口)(简称BD对象)存储bean的定义信息
这里简单描述初始化和实例化的区别
AnnotationConfigApplicationContext
扩展性
postProcessorXXXX
在堆内存中开辟一开内存空间属性是默认值
初始化后(后置处理器AOP)
Spring生命周期流程分析
@PostConstruct此注解加在方法上该方法一启动就执行
SAX解析xml
初始化
BeanFactoryPostProcessor
bean后置处理器
实例化
接口
DefaultAopProxyFactory类下的createAopProxy()
工厂后置处理器
ApplicationContext
实例化对象(普通对象)createBeanInstance
空的实现方法
容器对象
默认无参构造
作者:xiaowang
IOC容器N个ban对象
document
AOP
<bean id=xx class=\"com.xxx.Xxx.class\" ><property name=\"username\" value=\"zhangsan\" <bean/>
通过反射去实例化从BeanDefinition中获取对象的属性信息Class.form(\"com.xx.xx\")
AopProxyFactory接口下的createAopProxy()
没有实现接口CGLIB动态代理
多个构造判断有无@Autowired加了此注解的用这个方法
注解
生成一个代理对象放入单列池
BeanPostProcessor该接口下的postProcessAfterInitialization()方法即后置处理器(AbstractAdvisingBeanPostProcessor)实现下的proxyFactory.getProxy(getProxyClassLoader());调用该方法
配置类
自定义对象
框架设计思路
对Bean对象进行扩展实现(AOP)
XML
增强器(后置处理器)
针对的操作对象不同
BeanPostProcessor
IO文件加载
注解解析
BeanDefinitionReader接口下的loadBeanDefinDinition()方法
收藏
0 条评论
下一页