sxd-spring-02关键名词
2022-09-23 16:17:18 2 举报
sxd-spring关键业务
作者其他创作
大纲/内容
3. 修改build.gradle的配置文件,使用aliyun的地址
创建过程中
递归
registerBeanPostProcessors注册bean的后置处理器
loadBeanDefinitions()加载bean定义信息
构造器
MessageSource
针对Bean实例化之后做一些逻辑处理
继承
动态注册 扫描路径的类- 实现 ClassPathBeanDefinitionScanner
ListableBeanFactory
ApplicationEventPublisher
ApplicationContext
定义规范,方便扩展
Constructor ctr = class.getConstructor();Object ob = ctr.newInstance
三级缓存singletonFactories
delegate.parseCustomElement
BeanFactory} 接口的扩展将由 bean 工厂实现 可以枚举其所有 bean 实例,而不是按照客户端的请求逐个尝试按名称查找 bean。预加载所有 bean 定义的 BeanFactory 实现(例如基于 XML 的工厂)可以实现此接口。
ServletContextAware
createBeanInstance
实例化
getNamespaceHandlerResolver()
初始化a属性
注册扫描路径的类- 实现 BeanDefinitionRegistryPostProcessor重写 postProcessBeanDefinitionRegistry 方法xml 引入 component-san bean
这里面保存了一个对象生成的ObjectFactory方法,里面会调用createBean方法
容器对象
GenericBeanDefinition
BeanFactoryPostProcessor
实例化A
加载定义的地址createReaderContext(resource)
源码编译
customizeBeanFactory 自定义bean信息
DefaultListableBeanFactory
如果有工厂则删除
this.beanFactory = beanFactory 把beanFactory赋值
对象的属性值都是默认值
向注册的侦听器发布事件的能力
IOC
成熟的基类
BeanPostProcessor
执行 BeanFactoryPostProcessor
接口的扩展,由能够自动装配的 bean 工厂实现,前提是他们希望为现有的 bean 实例公开此功能
创建对象
获取A对象
popular
loadBeanDefinitions(beanDefinitionReader)
BeanFactory
ClassPathBeanDefinitionScanner.doscan方法
getType
源码大致流程
AnnotatedGenericBeanDefinition
initApplicationEventMulticaster初始化事件多播器
loadBeanDefinitions(EncodedResource encodedResource)
注册bean的各种后置处理器,实现 BeanPostProcessor
获取B对象
Bean生命周期
BeanDefinitionReader
doRegisterBeanDefinitions
ComponentScanBeanDefinition判断依据拿element 的 localname属性取对应的处理类
设置idea 的vm参数:-XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048mhelp-> edit custom vm operations
HierarchicalBeanFactory
完整代码-- xml <bean class=\"com.sunxd.extend.selfBeanDefinitionRegistryPostProcessor.MyBeanDefinitionRegistryPostProcessor\" /><context:component-scan base-package=\"com.sunxd.extend.selfBeanDefinitionRegistryPostProcessor.scan\"/>-- javapublic class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {boolean useDefaultFilters = false;//是否使用默认的filter,使用默认的filter意味着只扫描那些类上拥有Component、Service、Repository或Controller注解的类。String basePackage = \"com.sunxd.extend.selfBeanDefinitionRegistryPostProcessor.bean\
解析消息的能力,支持国际化
ConfigurableApplicationContext
populateBean
B 类属性a
ApplicationContextAware
注册对应的标签处理类namespaceHandler.init
给属性设值
RootBeanDefinition
填充属性
内置对象Spring需要的对象
功能的拓展
从父级继承设置的 bean 的 bean 定义
parseDefaultElement
执行后置处理方法
BeanPostProcessor:after
SimpleInstantiationStrategy简单的实现
额外曾、删beandefinition
实例化B
1. 容器的创建及加载beandefinitionobtainFreshBeanFactory()
processBeanDefinition
创建结果
FactoryMethod
访问 Spring bean 容器的根接口这是 bean容器的基本客户端视图该接口由包含许多 bean 定义的对象实现 Bean 工厂实现应该尽可能支持标准的 bean 生命周期接口
创建对象A
是用于标准bean定义目的的一站式商店。像任何bean定义一样,它允许指定一个类以及可选的构造函数参数值和属性值
注册beandefinitionBeanDefinitionReaderUtils.registerBeanDefinition
META-INF/spring.handlers
AbstractRefreshableConfigApplicationContext(configLocations)
2. 确保本地的jdk是1.8.2以上
BeanFactoryAware
没有
类.class
doCreateBean
自定义xml文件解析
添加对通过{@link AnnotatedBeanDefinition}接口公开的注释元数据的支持。
解析bean标签,创建bddelegate.parseBeanDefinitionElement
PostProcess
初始化b属性
repositories {maven { url \"https://maven.aliyun.com/nexus/content/groups/public\" }maven { url \"https://maven.aliyun.com/repository/spring\" } // 一定要加上maven { url \"https://repo.spring.io/plugins-release\" } // 一定要保留}
完整对象
BeanDefinitionReader#registerBeanDefinitions
bean 实例化后
执行init-method方法
BeanFactoryBean 工厂,整个容器的跟接口,也是容器的入口Construct ctor= class.getConstructor();Object obj = ctor.newInstance();
这是二级缓存,这个里面保存的是一个已经初始化,尚未实例化的对象
可以在 ConfigurableBeanFactory 接口中找到允许以可配置方式设置父级的 bean * 工厂的相应 {@code setParentBeanFactory} 方法
registerBeanDefinitions
带注解需要依赖注入的 ,手动注册完所有的bean,否则找不到依赖的bean- 实现 BeanDefinitionRegistryPostProcessor重写 postProcessBeanDefinitionRegistry 方法xml 引入 component-san bean
遇到spring-messaging 模块编译失败,把src/test得模块全部删掉
BeanDefinition描述了一个bean实例,它具有属性值、构造函数参数值以及具体实现提供的更多信息
普通bean- 实现 BeanDefinitionRegistryPostProcessor重写 postProcessBeanDefinitionRegistry 方法
ScannedGenericBeanDefinition
Aware
接口
Supplier设置Supplier方法创建
重点属性
对象.getclass
初始化&循环依赖
FactoryBean和BeanFactory的区别
后置处理器增强器
AbstractApplicationContext
有
重点类
BeanDefinition
ChildBeanDefinition
xml
Supplier
在堆中开辟一块空间
ResourceLoaderAware
Spring 的基于 JNDI 的简单实现
CglibSubclassingInstantiationStrategy
Constructor
为应用程序提供配置的中央接口。 这在应用程序运行时是只读的,但如果实现支持,可能会重新加载
Spring 对 {@link ConfigurableListableBeanFactory} * 和 {@link BeanDefinitionRegistry} 接口的默认实现:一个成熟的 bean factory * 基于 bean 定义元数据,可通过后处理器进行扩展
doLoadBeanDefinitions
二级缓存earlySingletonObjects
XmlBeanDefinitionReader (beanFactory)
1 = \"org.springframework.context.annotation.internalConfigurationAnnotationProcessor\"2 = \"org.springframework.context.annotation.internalAutowiredAnnotationProcessor\"3 = \"org.springframework.context.annotation.internalCommonAnnotationProcessor\"4 = \"org.springframework.context.event.internalEventListenerProcessor\"5 = \"org.springframework.context.event.internalEventListenerFactory\"
初始化
class.forname
反射
执行BeanDefinitionRegistryPostProcessor
大多数可列出的bean工厂要实现的配置接口它还提供了分析和修改bean定义以及预实例化单例的工具
isSingleton
InstantiationStrategy实例化策略的定义
System.getProperties()
执行init方法
AutowireCapableBeanFactory
都是用来创建对象的当使用BeanFactory的时候,必须遵循完整的创建过程,这个过程是由Spring控制的当使用FactoryBean只需要调用getObject就可以返回具体对象,整个对象的创建过程是由用户自己来控制的,更加灵活
新生状态
createBeanFactory() 创建bean工厂
scanner.doScan 的时候会找对应的组件处理器
在容易创建的过程中,需要动态的改变bean的信息怎么办?
设置Aware接口的属性
ApplicationEventPublisherAware
bean 实例化前
initializeBean
增强beanDefinition信息只有一个方法postprocessbeanFactory
按照官方给的步骤就没问题了
类的区别
AbstractXmlApplicationContext(validating)
javadoc 的编译报错,参考这个地址可解决https://blog.csdn.net/Future_LL/article/details/103163827
ctor.newInstance
访问应用程序组件的 Bean 工厂方法
System.getEnv();
A 类属性b
getBean
bean创建方式
以通用方式加载文件资源的能力
initMessageSource初始化消息源
resolveBeforeInstantiation如果有需要,返回代理
StandardEnviroment
ResourceLoader
增强bean信息有2个方法before/after
parseBeanDefinitions
一个标记超接口,表明一个 bean 有资格被特定框架对象的 Spring 容器通过回调样式方法通知.实际的方法签名由各个子接口确定,通常应该只包含一个接受单个参数的返回 void 的方法
执行Aware接口方法
GenericBeanDefinition
ClassPathXmlApplicationContext(configResources)
注册 BeanPostProcessor
存放父容器的引用
全局搜(本地jdk 是11)sourceCompatibility = 1.8sourceCompatibility = 1.8替换为sourceCompatibility = 11sourceCompatibility = 11
GenericBeanDefinition类的扩展,基于 ASM ClassReader,支持通过 {@link AnnotatedBeanDefinition} 接口公开的注释元数据
yaml
SpringBean
反射创建对象
编译源码的时候,尽量在使用jdk1.8 .否则会有各种问题。。非jdk1.8得,在执行build得时候,最好跳过test 命令为gradle build --stacktrace -x test
对象的创建分为2个步骤:实例化、初始化。解决循环依赖的根基
createBean
doLoadDocument
4. 直接使用idea 打开,修改idea的jdk,及kotlin所依赖的jar版本
处理bean标签
我们定义需要的对象
SchedulerContextAware
查找对应的namespace的处理类ContextNamespaceHandler#parse
CGlib代理
init-method
BeanPostProcessor:before
处理component-scan标签
AbstractRefreshableApplicationContext(beanFactory,allowBeanDefinitionOverriding)
FactoryBean
Enviroment
处理alias标签,复制别名
context.getBean
x修改beandefinition属性
这个里面保存的是一个已经完全实例化完整的bean
完整代码-- xml <bean class=\"com.sunxd.extend.selfBeanDefinitionRegistryPostProcessor.MyBeanDefinitionRegistryPostProcessor\" />-- javapublic class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(CommonBean.class);registry.registerBeanDefinition(\"commonBean\
clazz.getDeclaredConstructor
BenDefinition
处理beans标签,复制别名
直接赋值
ConfigurableListableBeanFactory
LookupOverrideMethodInterceptorCGLIB MethodInterceptor重写方法,用返回在容器中查找的bean的*实现替换它们ReplaceOverrideMethodInterceptorCGLIB MethodInterceptor重写方法,用对泛型MethodReplacer的调用*替换它们
实例化策略的默认实现:无参构造实例有参构造实例工厂方法
普通对象
parseCustomElement
一级缓存singletonObjects
getObject
properties
执行初始化方法
DefaultResourceLoader
实例化策略
SimpleJndiBeanFactory
处理import标签,引入其他文件
直接返回
开始创建
创建B对象
factory静态方法、工厂
finishBeanFactoryInitializationbean的创建
doGetBean
完整代码-- xml <bean class=\"com.sunxd.extend.selfBeanDefinitionRegistryPostProcessor.MyBeanDefinitionRegistryPostProcessor\" /><context:component-scan base-package=\"com.sunxd.extend.selfBeanDefinitionRegistryPostProcessor.scan\"/>-- javapublic class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {RootBeanDefinition rootBeanDefinition1 = new RootBeanDefinition(ControllerTest.class);registry.registerBeanDefinition(\"controllerTest\
找到并赋值了this.namespaceHandlerResolver = createDefaultNamespaceHandlerResolver()
ScannedGenericBeanDefinition
loadBeanDefinitions(resources)
根bean定义表示支持在运行时Spring BeanFactory中的特定bean的合并bean定义。它可能是从相互继承的多个原始bean定义创建的
1. 官网下载源码,指定tag下载
接口的简单实现
BeanDefinitionRegistryPostProcessor
总结=》bean的生命周期
AbstractBeanDefinition
0 条评论
下一页