理解IOC容器与AOP思想

一、面向对象的工程与对象

面向对象的软件设计,是由对象组成(对象的定义、依赖关系的确定),而且对象之间彼此合作来完成某个功能。

没有引入IOC之前由设计者自行管理对象,IOC的引入将对象的创建、依赖关系的管理和生命周期的控制从应用程序代码中解耦出来。

二、IOC容器的设计

IOC容器的核心设计那一定是依赖注入,依赖注入是基于反射实现的。

Spring IOC容器存储使用的数据结构是Bean,类似于Object是无法重复的。

IOC的设计主要是封装的思想。

三、Bean

1.Bean与Spring容器之间的关系

用四个过程去表达这种关系:

第一步,容器去读取Bean的配置信息。也就是Bean定义的属性,那么它最为常见的呢,就是通过autowired的这样的注解定义的引用或者说依赖关系。那么最终呢,在容器中会被包装成Beandefinition。

第二步,有了Bean的定义以后,可以根据定义中所描述的这个Bean应该有的样子去实例化这个Bean,也就是容器会将注册表中的所有并去完成实例化。

第三步和第二步是同一个过程中的两个步骤。完成实例化的Bean,它会被放入到IOC容器里面。这个Bean就会常驻在IOC容器,直到容器关闭或者是并被清理掉。在IOC容器中,Bean所在的数据结构也叫做Bean缓存池,是有一个map去维护的。

第四步,业务功能想要使用Bean的时候,就去告诉IOC容器说我需要去使用这个Bean。那么IOC容器就完成提供或者说注入。

2.Bean的生命周期

实例化,也就是“new”。

属性填充(依赖),用户属性、容器属性赋值。

初始化,前置方法与后置方法。

销毁。

3.Bean的循环依赖问题

使用三级缓存(通过三个Map)解决循环依赖:

第一个Map<String,Object>缓存已经实例化初始注入的Bean对象。第二个Map<String,Object>缓存实例化后但还未进行属性注入的Bean,用于提前显示Bean已存在于IOC容器中。第三个Map<String,ObjectFactory>用于生成原始对象进行AOP操作后的代理对象。

4.Bean的分类操作

深入理解BeanPostProcessor:在Bean执行初始化的前后进行。解析Bean自定义注解,针对注解做一些前置处理,并归类Bean聚合处理。对Bean分析处理,记录时间和检查等。

四、AOP

1.AOP的执行时机:

在Service层的前后执行。

将分散在各个业务逻辑代码中的相同代码通过横向切割的方法抽取到独立模块中。这样在进行coding的过程中只需要关注业务逻辑,而不用担心与业务逻辑无关的代码。

2.AOP的核心概念

Aspect:声明切面类,交由Spring管理,也是一种Spring Bean。

Joint Point:明确定义的点,异常处理等。

Point Cut:连接点的集合。

Weaving:把切面连接到其他的应用,并创建一个被通知的对象。

Target:目标对象,AOP对Target起到作用。

Advice:选择一种确定的通知类型。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J_Silver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值