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