美文网首页
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