面试知识点总结之Spring的IOC和AOP

SpringIOC解决的是对象管理和对象依赖的问题

本来是我们自己手动new出来的对象,现在则把对象交给SpringIOC容器管理
IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系
等我们需要用对象的时候,从工厂里边获取就好了

【控制反转】指的是:把原有自己掌控的事交给别人去处理
它更多的是一种思想或者可以理解为设计模式
比如:本来由我们自己new出来的对象,现在交给IOC容器,把对象的控制权交给它方了

对象无需自行创建或者管理它的依赖关系,依赖关系将被【自动注入】到需要的对象当中去

主要好处在于【将对象集中统一管理】并且【降低耦合度】
比如:用SpringIOC可以方便单元测试,对象创建复杂,对象依赖复杂,单例等等,什么都可以交给SpringIOC
理论上自己new出来的都可以解决上面的问题,Spring在各个场景组合下有可能不是最优解
但new出来的都可以解决上面的问题,可能你得自己写工厂,得实现一大套东西才能满足需求,写着写着有可能还是Spring那一套
并且Spring核心不仅仅IOC,除了把对象创建出来还有一整套得Bean生命周期管理
比如说要实现对象增强,AOP就有,不然还得自己创建代理。。。

SpringAOP解决得是非业务代码抽取的问题
AOP底层的技术是动态代理,在Spring内实现依赖的是BeanPostProcessor
比如需要在方法上诸如写【重复性代码】的非业务代码,就可以利用SpringAOP
所谓【面向切面编程】在我理解下就是方法前后增加非业务代码

用AOP来对公司的监控客户端进行封装
一个系统离不开监控,监控基本的指标由QPS,RT,ERROR等等
对外暴露的监控客户端只能在代码里写对应的上报信息(灵活,但会与业务代码掺杂在一起)
于是我利用注解+AOP的方式封装了以下,只要方法/类上带有我自定义的注解
方法被调用时就会上报AQS,RT等信息,实现了非业务代码和业务代码分离的效果

项目时怎么把对象交给IOC容器管理的?或者说一般是怎么定义Bean的?
Spring提供了4种方式,分别是 1. 注解 2.XML 3. JavaConfig 4. 基于GroovyDSL的配置
一般项目我们用注解或XML比较多,少部分用JavaConfig
日常业务代码一般用注解来定义各种对象,责任链这种一般配置在XML;【注解】解决不了就用JavaConfig,
总体还是看项目代码风格,反正就是定义元数据,能给到Spring解析就好了。
摘自微信公众号Java3y;

原文地址:https://www.cnblogs.com/cgy-home/p/14522521.html