Spring核心知识点
2023-02-21 21:02:13 0 举报
AI智能生成
Spring核心知识点
作者其他创作
大纲/内容
被Spring管理的对象叫做Bean
Bean肯定是一个对象,对象不一定是Bean
Bean
BeanDefinition是用来描述一个Bean的,表示Bean的定义
Bean对象的类型
beanClass
在Spring容器中,一个beanName只对应一个Bean对象
singleton
在Spring容器中,每次通过beanName获取的都是新的Bean对象
prototype
一个请求中,一个beanName只对应一个Bean对象
request
一个Session中,一个beanName只对应一个Bean对象
session
一个应用中,一个beanName只对应一个Bean对象
application
可以自定义作用域
自定义作用域
scope
是不是一个懒加载的Bean
没有意义
原型懒加载Bean
非懒加载的单例Bean是在Spring启动的时候创建的
懒加载的单例Bean不是在Spring启动的时候创建的,而是在第一次获取Bean时创建的
单例懒加载Bean
@Lazy
isLazy
表示所依赖的其他Bean
@DependsOn
dependsOn
<bean id=\"x'x'x\" class=\"x'x'x\" autowire=\"byType\" />
涉及到构造方法推断
通过类中的构造方法进行自动装配
constructor
通过类中的set方法的参数类型进行自动装配
byType
通过类中的set方法的名字进行自动装配
byName
默认值,不进行自动装配
no
自动装配模式
注意和@Autowired的区别
autowire
当前Bean是不是一个自动装配候选者
表示当前Bean能不能自动注入给其他Bean,默认为true,如果为false,表示当前这个Bean不能自动注入给其他Bean
<bean id=\"xxx\" class=\"xxx\" autowire-candidate=\"false\"/>
autowireCandidate
主Bean
在进行自动注入时,通过属性类型,或方法参数类型可能会找到多个Bean,如果这多个Bean中存在一个主Bean,那么就直接把这个主Bean注入给属性或方法,如果存在多个主Bean,则会报错
@Primary
primary
Spring在创建Bean的过程中会调用初始化方法
初始化方法
initMethodName
Spring在销毁Bean的过程中会调用销毁方法
销毁方法
destroyMethodName
构造方法参数值
可以通过BeanDefinition中的这个属性来给构造方法传递值
constructorArgumentValues
属性值
可以通过BeanDefinition中的这个属性来给属性赋值
propertyValues
一个Bean,可以通过另外一个Bean的某个方法来创建,这个属性就是指向另外那个Bean的beanName
factoryBeanName
一个Bean,可以通过另外一个Bean的某个方法来创建,这个属性就是另外那个Bean中的某个方法名字
factoryMethodName
BeanDefinition
Bean工厂,可以根据某个bean的名字、或类型、或别名获取某个Bean对象
可以注册、保存、移除、获取某个BeanDefinition
BeanDefinitionRegistry
可以直接注册、获取某个单例Bean
SingletonBeanRegistry
在BeanFactory的基础上,增加了其他功能,可以获取所有BeanDefinition的beanNames,可以根据某个类型获取对应的beanNames,可以根据某个类型获取{类型:对应的Bean}的映射关系
ListableBeanFactory
在BeanFactory的基础上,添加了获取父BeanFactory的功能
HierarchicalBeanFactory
在HierarchicalBeanFactory和SingletonBeanRegistry的基础上,添加了设置父BeanFactory、类加载器(表示可以指定某个类加载器进行类的加载)、设置Spring EL表达式解析器(表示该BeanFactory可以解析EL表达式)、设置类型转化服务(表示该BeanFactory可以进行类型转化)、可以添加BeanPostProcessor(表示该BeanFactory支持Bean的后置处理器),可以合并BeanDefinition,可以销毁某个Bean等等功能
ConfigurableBeanFactory
是直接继承了BeanFactory,在BeanFactory的基础上,支持在创建Bean的过程中能对Bean进行自动装配
AutowireCapableBeanFactory
实现了ConfigurableBeanFactory接口,继承了FactoryBeanRegistrySupport,这个BeanFactory的功能已经很全面了,但是不能自动装配和获取beanNames
AbstractBeanFactory
继承了ListableBeanFactory、AutowireCapableBeanFactory、ConfigurableBeanFactory
ConfigurableListableBeanFactory
继承了AbstractBeanFactory,实现了AutowireCapableBeanFactory,拥有了自动装配的功能
AbstractAutowireCapableBeanFactory
继承了AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory接口和BeanDefinitionRegistry接口,所以DefaultListableBeanFactory的功能很强大
DefaultListableBeanFactory
BeanFactory
ApplicationContext是个接口,可以把它理解为一个特殊的BeanFactory
拥有获取父BeanFactory的功能
拥有获取beanNames的功能
资源加载器,可以一次性获取多个资源(文件资源等等)
ResourcePatternResolver
可以获取运行时环境(没有设置运行时环境功能)
EnvironmentCapable
拥有广播事件的功能(没有添加事件监听器的功能)
ApplicationEventPublisher
拥有国际化功能
MessageSource
继承
继承了ApplicationContext接口,增加了,添加事件监听器、添加BeanFactoryPostProcessor、设置Environment,获取ConfigurableListableBeanFactory等功能
ConfigurableApplicationContext
实现了ConfigurableApplicationContext接口
AbstractApplicationContext
GenericApplicationContext
可以单独注册某个为类为BeanDefinition(可以处理该类上的@Configuration注解,已经可以处理@Bean注解),同时可以扫描
AnnotationConfigRegistry
继承了GenericApplicationContext,实现了AnnotationConfigRegistry接口,拥有了以上所有的功能
AnnotationConfigApplicationContext
它也是继承了AbstractApplicationContext,但是相对于AnnotationConfigApplicationContext而言,功能没有AnnotationConfigApplicationContext强大,比如不能注册BeanDefinition
ClassPathXmlApplicationContext
实现类
ApplicationContext
Spring中提供的扩展机制,允许程序员可以干涉Bean的生命周期
Bean的后置处理器
在BeanPostProcessor的基础上增加了实例化前
在BeanPostProcessor的基础上增加了实例化后
在BeanPostProcessor的基础上增加了填充属性
InstantiationAwareBeanPostProcessor
在BeanPostProcessor的基础上增加了销毁前
DestructionAwareBeanPostProcessor
在BeanPostProcessor的基础上增加了实例化和实例化后之间
MergedBeanDefinitionPostProcessor
在InstantiationAwareBeanPostProcessor的基础上增加了推断构造方法
在InstantiationAwareBeanPostProcessor的基础上增加了提前暴露引用
SmartInstantiationAwareBeanPostProcessor
子接口
BeanPostProcessor
Spring中提供的扩展机制,允许程序员可以操作BeanFactory
Bean工厂的后置处理器
注意,不能注册BeanDefinition,只能修改BeanDefinition
可以获取到BeanFactory,程序员可以操作BeanFactory
可以注册BeanDefinition
子接口BeanDefinitionRegistryPostProcessor
BeanFactoryPostProcessor
基本概念
1. 生成BeanDefinition
2. 合并BeanDefinition
3. 加载类
4. 实例化前
5. 推断构造方法
6. 实例化
7. BeanDefinition的后置处理
8. 填充属性
BeanNameAware
BeanClassLoaderAware
BeanFactoryAware
9. 执行Aware
EnvironmentAware
EmbeddedValueResolverAware
ResourceLoaderAware
ApplicationEventPublisherAware
MessageSourceAware
ApplicationContextAware
ApplicationContextAwareProcessor主要也是执行一些其他的Aware
执行@PostConstruct定义的方法
InitDestroyAnnotationBeanPostProcessor
10. 初始化前
执行InitializingBean接口中的方法
执行BeanDefinition中所定义的初始化方法
11. 初始化
AOP功能实现者
AbstractAutoProxyCreator
12. 初始化后
Bean的生命周期
1. 容器关闭
2. 发布ContextClosedEvent事件
3. 调用LifecycleProcessor的onClose方法
1. 找出所有DisposableBean(实现了DisposableBean接口的Bean)
2. 遍历每个DisposableBean
3. 找出依赖了当前DisposableBean的其他Bean,将这些Bean从单例池中移除掉
4. 调用DisposableBean的destroy()方法
5. 找到当前DisposableBean所包含的inner beans,将这些Bean从单例池中移除掉
4. 销毁单例Bean
Bean销毁的生命周期
可以将指定的多类注册为BeanDefinition
普通类
ImportSelect
ImportBeanDefinitionRegistrar
@Import
针对BeanFactory的扩展点,可以操作BeanFactory
针对BeanDefinitionRegistry的扩展点,可以注册BeanDefinition
BeanDefinitionRegistryPostProcessor
扩展点
Spring核心知识点
0 条评论
回复 删除
下一页