美文网首页
IoC容器设计实现及Spring源码分析

IoC容器设计实现及Spring源码分析

作者: 极速魔法 | 来源:发表于2022-03-14 20:15 被阅读0次

    自定义IoC&AOP框架

    核心思想

    IOC (Inversion of Control) 控制反转

    - 创建管理对象的权利 转移给IOC容器,控制权反转
    - IOC解决了对象之前的耦合问题
    - 容器是一组 组件和过程的集合,包括BeanFactory,单例池,BeanPostProcessor等之间的协作
    

    IOC 和 DI(Dependency Injection)区别

    • 共同描述了对象实例化和依赖关系维护
    • IOC站在对象的角度
    • DI 站在容器的角度,容器把对象依赖的其他对象注入

    AOP(Aspect oriented Programming)

    面向切面编程,使用场景: 日志,权限校验,事务控制
    逻辑代码,由于横切逻辑影响很多方法,最后构成

    事务

    数据库事务实质是Connection的事务。事务绑定当前线程,避免拿到不同的Connection。

    Spring高级应用

    IOC

    xml 配置

    // java se
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    
    ApplicationContext context = new FileSystemXmlApplicationContext("/home/beans.xml");
    
    // web,监听器加载xml
    ContextLoaderListener
    
    

    注解

    // se
    ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
    
    // web,监听器加载注解
    ContextLoaderListener
    

    BeanFactory ApplicationContext区别

    顶层接口BeanFactory,ApplicationContext 是子接口

    Bean标签属性

    • 单例模式的bean对象⽣命周期与容器相同
    • 多例模式的bean对象,spring框架只负责创建,不负责销毁。

    lazy-Init 延迟加载

    不想让⼀个singleton bean 在 ApplicationContext实现初始化时被提前实例化,需要时再实例化
    xml

    <bean id="testBean" class="cn.lagou.LazyBean" lazy-init="true" />
    

    注解
    @Lazy

    FactoryBean

    • Bean的类型: 普通Bean,FactoryBean
      生成某一个类型的Bean实例,自定义Bean的创建过程(复杂Bean的定义)
      使用场景:Spring框架⼀些组件中会使⽤,还有其他框架和Spring框架整合时使⽤

    BeanFactoryPostProcessor

    Bean对象实例化之后,BeanFactoryPostProcessor 做后置处理

    循环依赖

    定义:循环依赖其实就是循环引⽤,也就是两个或者两个以上的 Bean 互相持有对⽅

    Spring中循环依赖场景有:

    • 构造器的循环依赖(构造器注⼊)
    • Field 属性的循环依赖(set注⼊)

    循环依赖处理机制
    单例 bean 构造器参数循环依赖(⽆法解决)
    prototype 原型 bean循环依赖(⽆法解决)
    单例bean通过setXxx或者@Autowired进⾏循环依赖(可以解决)
    解决方法:

    • Spring 的循环依赖的理论依据基于 Java 的引⽤传递,当获得对象的引⽤时,对象的属性是可以延 后设置的,但是构造器必须是在获取引⽤之前。
    • 通过提前暴露⼀个ObjectFactory对象来完成的,放在三级缓存 singletonFactorys(未成形的Bean)

    相关文章

      网友评论

          本文标题:IoC容器设计实现及Spring源码分析

          本文链接:https://www.haomeiwen.com/subject/dxpsdrtx.html