spring学习1bean的生命周期相关

前言:

DI 依赖注入,是一种手段
ioc 控制反转;一种方式;

类加载步骤

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml)
XXX xxx = ac.getBean(XXX.class)
xxx.method();
1、加载xml
2、解析xml
3、封装bean对象 beanDefinition bean的描述信息;
4、实例化
5、放到容器中
6、从容器中获取

ioc容器 container

容器->Map 
1、String ,object (className,value)
2、Class,object (type,value)
3、String,objectFactory (三级缓存)
4  String,beanDefinition (对象定义信息)

三级缓存

三级缓存是提供一个标记创建中bean的map ,可以提前暴露正在创建的bean供其他的bean依赖。
a->b  b->a  ,初始化a时 b未初始化,将a存入创建中的map 等待b的创建,b创建时从创建中的map获取创建中的a对象注入 完成b的初始化。为了解决循环依赖。缓存的是bean工厂
2、3级缓存是为了解决循环依赖。

实例化步骤:

xml、properties、yaml、json都可以定义bean的信息 ,扩展文件类型,定义bean的规范,使用beanDefinitionReader实现接口, 实现beanDefinition----使用反射来实例化
为什么用反射:灵活,可以获得属性、注解、方法等;
bean 的scope :singleton/ prototype /request/ session /global
反射如何创建对象 :先获取Class ,Class.forName("完全限定名")或者  对象.getClass() 或者 类名.class();
clazz.getConstructor().newInstance();

相关对象解释

BeanFactory :bean工厂 ,整个容器的根接口,也是容器的入口The root interface for accessing a spring container。such as listableBeanFactory
DeafaultListableBeanFactory相关类图:
DeafaultListableBeanFactory类图
AbstractAutowireCapableBeanFactory:

在容器创建过程中需要动态的改变beanDefinition的信息怎么办?使用:BeanFactoryPostProcessor
postProcessor:后置处理器/增强器;
BeanFactoryPostProcessor:增强BeanDefinition信息;
BeanPostProcessor:增强bean信息;
创建对象= 实例化+初始化;
实例化过程:在堆中开辟一块空间,对象的属性值都是默认值。
初始化:在实例化之后,给属性设置值;

对象创建过程

1、实例化
2、填充属性
3、设置aware接口 ,提供一个入口赋值使用spring框架自定义的对象属性;
4、BeanPostProcessor.before;做扩展来使用aop;AbstractAutoProxyCreator :1、cglibAopProxy 2、jdkDynamicProxy;
5、执行init-method
6、BeanPostProcessor.after;
7、得到完整对象。
8、context.getBean();

BeanFactory对当前过程有定义
在这里插入图片描述

Aware接口什么作用:当spring创建的bean对象在进行具体操作的时候,如果需要容器的其他对象,此时可以将对象实现Aware接口来满足当前的需要。

spring bean分为:
容器对象:内置对象
普通对象:我们自定义需要的对象

在不同的阶段要处理不同的工作:应该怎么办?
使用观察者模式:监听器,监听事件,多播器(广播器)

接口:
BeanFactory :bean工厂
Aware:Spring对象注入
BeanDefinitionReader 读取beanDefinition信息的解析类;
BeanDefinitionRegistry :bean定义信息的增删改查操作;
BeanDefinition: bean定义信息;
BeanFactoryPostProcessor:beanDefinition增强
BeanPostProcessor:bean增强
Environment->StandardEnvironment:1、System.getEnv() 2、System.getProperties 环境变量设置;
FactoryBean:自定义创建流程,不需要遵循bean的生命周期,创建后交给spring处理;
factoryBean 有三个方法:isSingelton(); getObject(); getObjectType();三个方法

beanFactory 和factoryBean的区别:

都是用来创建对象的
当使用beanFactory的时候必须要遵循完整的创建过程,这个过程是由spring来管理控制的;
而factoryBean只需要调用getObject就可以返回具体的对象,整个对象的创建过程是由用户自己来控制的,更加灵活;
实现factoryBean,创建这个对象时,会直接调用getObject方法;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值