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