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

2022-03-14  本文已影响0人  极速魔法

自定义IoC&AOP框架

核心思想

IOC (Inversion of Control) 控制反转

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

IOC 和 DI(Dependency Injection)区别

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标签属性

lazy-Init 延迟加载

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

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

注解
@Lazy

FactoryBean

BeanFactoryPostProcessor

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

循环依赖

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

Spring中循环依赖场景有:

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

上一篇 下一篇

猜你喜欢

热点阅读