springBean整理(一),不为别的,只为面试吗

一.首先了解 Spring容器(IOC)

1.1ClassPathXmlApplicationContext 与 AnnotationConfigApplicationContext两
个获取IOC容器的区别

 ClassPathXmlApplicationContext
基于XML元配置,初始化应用上下文
 AnnotationConfigApplicationContext
基于Java元配置,初始化应用上下文

** 1.2Spring容器(IOC)容器初始化过程**
springBean容器初始化流程
上图是根据spring源码来具体分析的,只看这张图其实刚了解spring容器的小伙伴不能快速掌握,下面我根据自己学习的结果具体来谈谈我对spring容器启动加载的一些体会,希望可以帮助到大家
1.先谈谈springIOC,他就是控制翻转,是一种思想具体实现就靠依赖注入(DI)
2.springIOC大概分为几个步骤,在这之前我想想一些框架springMVC,等启动过程中都要加载配置文件或者注解等,这些都相当于把文件或者.class先读取到jvm中…然后进行一些预操作什么的,在进行一些核心的Handler扩展(AOP)实例化等;
3我大概解说一些spring容器启动步骤
1)通过BeanDefinitionReader验证解析加载xml,配置类,Annotation,等其他方式的类 (BeanDefinitionReader有xml解析,还有注解的read)加载到BeanDefinition这个容器中(map)
2) 加载到bd中后可以通过BeanFactoryPostProcessor这个扩展对bd中的class进行修改
3)容器后处理器BeanPostProcessors 会在具体事例化bd中的bean过程中穿插执行,
4)通过反射根据根据BD信息获取合适的Constructor实例化早期对象
5)进行依赖注入实例的属性
6)根据BD配置调用实例init-method方法
7)事件传播器(发布和接收定制的事件就是一个监听器)
8)生命周期LifeCycle接口
二.SpringBean生命周期讲解

spring生命周期
bean的生命周期理解
就是容器在加载过程中bean实例化过程
大概分为几个步骤
1)验证一下BD中的信息,及将父类BD整合到mbd中
2)通过bd中的信息通过反射生成早期对象包装成一个objectFactory对象放入一级缓存
3)进行属性注入
注:属性注入会有循环依赖注入问题,spring只能解决set循环依赖问题,原型依赖和构造方法依赖无法解决会抛异常,主要是通过一个map中有没有正在创建的对象来判断是不是原型依赖或者单例构造依赖,如果有就抛异常;
4)调用init-method方法
5)中间会穿插后bean后处理器,这块主要是bean后处理器有许多实现类,会执行如aop加强,
6)构建成功后放入到单例池中,清除掉二级三级缓存中的早期对象
注:bean实例化过程中为啥要三级缓存来解决循环依赖问题而不用二级缓存解决呢?
这块主要是aop动态代理生成的对象和刚开始bean反射生成的早期对象不是一个,会在栈中有两个,会有两个不同的地址,所以需要二级和三级缓存完成动态代理aop加强操作,最后在会将aop加强的代理类升级到2级缓存,当最后完成init-method方法后返回到一级缓存中
三.FactoryBean 与BeanFactory
BeanFactory:工厂类接口,Spring容器的核心接口,实例化bean、配置bean之间的依赖关系
FactoryBean:实例化bean过程比较复杂时可以考虑使用
api

 public interface FactoryBean<T> {

    //返回的对象实例
     T getObject() throws Exception;
    //Bean的类型
    Class<?> getObjectType();
    //true是单例,false是非单例  在Spring5.0中此方法利用了JDK1.8的新特性变成了default方法,返回true
    boolean isSingleton();
}`

三.ApplicationContext 与BeanFactory区别
ApplicationContext 是BeanFactory一个子实现类
ApplicationContext ,会在容器启动过程中bean后处理期执行中将spring容器设置到ApplicationContext中
BeanFactory 是懒加载,getbean时候才会实例化
ApplicationContext 是容器启动就会返回实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值