小马哥spring学习笔记
2021-07-23 21:39:59 1 举报
AI智能生成
spring源码学习
作者其他创作
大纲/内容
资源与配置
其他特性
AOP
分支主题
ioc容器
spring事件
资源管理
国际化
校验
数据绑定
类型转换
spring表达式
aop
spring核心特性
spring最核心模块,提供了其他模块使用的基本功能
asm提供了字节码提升技术,可以动态修改jvm字节码文件
cglib提供了动态代理
lang几个注解
core核心包
util工具包,提供一些工具类供其他模块使用
package
spring-core
spring-bean
spring-aop
spring核心模块
spring核心总览
ioc,控制反转,说的是将bean依赖交给spring管理,这里主要强调的是将bean放入spring这个ioc容器中
DI,DependencyInjection,依赖注入,这里强调的是bean之间的依赖,如何将一个bean注入到另一个bean
ioc和DI
spring,通过beanFactory实现
javabeans通过beaninfo实现
ioc容器有哪些
依赖查找,beanFactory管理着bean,我们可以自己去查找bean,通过beanName,BeanType
依赖注入,当一个bean依赖另一个bean,spring会自动将被依赖的bean注入这个bean中
依赖查找和依赖注入
构造器注入,spring推断构造方法,将被依赖的bean传入构造方法中,实现注入
set方法注入,spring找到set开头并且第四个字母为大写的方法,将被依赖的bean注入
依赖注入的实现
beanFactory.getBean(String beanName)
根据beanName查找单个bean
beanFactory.getBean(Class clazz)
根据beanType查找单个bean
ListableBeanFactory.getBeansByType(Class clazz)
根据beanType查找bean集合
先根据类型查找集合,再在map中匹配名称
根据beanName+beanTYpe查找
将某个bean用注解标记
ListableBeanFactory.getBeansWithAnnotation(Class class)(注解clazz)
通过注解查找
定义一个beanFactory实现ObjectFactory,通过getObject返回bean
BeanProvider继承自ObjectFactory,spring自己实现了BeanProvider,通过beanFactory.getBeanprovider获取,这里每次获取都是不同的beanProvider
ObjectFactory和BeanProvider实现延时查找
依赖查找
xml中指定autowire属性为byName
通过名称注入
xml中指定autowire属性为byType
通过类型注入
bean中注入ApplicationContext对象
注入容器内建bean
bean中注入beanFactory对象
注入非bean
先按类型查找,如果有一个,直接注入,如果多个,再按baenName查找
autowired
按名称查找
resource
注入非bean,比如配置文件中字符串
value
需要依赖jsr330,一般不用
inject
依赖注入的注解
依赖注入模型
BeanFactory是底层ioc容器,行使着bean的生命创建及周期管理权利,ApplicationContext中管理着ListableBeanFactory,并且实现了更多功能,譬如aop,事务,资源管理等
BeanFactory和ApplicationContext
依赖注入
IoC
bean的定义元信息,包括bean的依赖关系,bean名称(别名),全限定名等
读取器,给reader绑定一个registy,将bean register到registy中
beanDefinitionReader
注册器模式,annotationConfigApplicationText实现了beanDefinitionRegisty
beanDefinitionRegisty
建造者模式,创建builder之后getBeanDefinition得到beanDefinition
beanDefinitionBuilder
BeanDefinitionScanner
将beanDefinition注册到ioc容器中
beanDefinition
根据指定的construct-arg通过构造方法初始化
原生的构造器实例化
创建一个Factory,静态方法返回对应bean,在xml中指定factory-method
静态工厂实例化
创建一个Factory,普通方法返回对应bean,在xml中配置工厂和bean,并且相关联
普通工厂方法实例化
自定义beanDefinition
serviceLoader
bean的实例化方式(instantiation)
在xml或者@bean属性中指定initMethod
init-method
bean的某个方法用@postConstruct注解
postConstruct
实现initializingBean接口,覆盖afterPropertiesSet方法
afterPropertiesSet
AbstractBeanDefinition.setEnforceInitMethod
bean的初始化方式
@preDestory
指定destory方法
实现DisposableBean,覆盖destory
AbstractBeanDefinition.setDesrotyMethodName
bean的销毁
springbean会被垃圾回收
bean的垃圾回收
springbean
set注入:<property>标签,指定value(简单类型)或者ref(对象类型)
构造器注入:<constructor-arg>标签,指定value或者ref
手动注入
构造器注入:<bean>标签中autowire属性,constructor
自动注入
xml
set注入:定义一个@bean,传入被依赖bean,new一个空参,调用set方法传入被依赖bean
构造器注入:定义一个@bean,传入被依赖bean,new一个有参,调用构造方法注入
set注入:@autowired加在set方法上,byName
构造器注入:@autowired加在构造方法上,byType
字段注入:@autowired加在字段上,先byType再byName
普通方法注入:@autowired加在普通方法上,先byType再byName
注解
set注入:创建beanDefinition并regist到BeanDefinitionRegistry中,在BeanDefinitionBuilder中addPropertyReference(\"\"),可以多次add,这里参数要指定beanName
构造器注入:无实现
set注入:创建beanDefinition并regist到BeanDefinitionRegistry中,在BeanDefinitionBuilder中指定autowiredMode为byName或者byType,
构造器注入:创建beanDefinition并regist到BeanDefinitionRegistry中,在BeanDefinitionBuilder中addConstructorArgReference(\"\"),多次add可以实现多个构造器参数,byName
api
依赖注入方式
依赖注入精讲
小马哥spring
0 条评论
回复 删除
下一页