欢迎光临散文网 会员登陆 & 注册

面试记录:IOC 与 AOP

2022-09-29 09:54 作者:喜欢安静の泡面君  | 我要投稿

什么是ioc,ioc 的好处?

ioc(Inverse of Control:控制反转) ,一种设计思想, 将原本在程序中手动创建对象的控制权,交由 spring 框架来管理。ioc 在不同的语言有不同的实现。
所谓控制反转,意为将在程序中创建对象的控制权转移到 ioc 容器,调用者只需要在使用时从 ioc 容器中取出,如果一个工具对象的创建过程需要的依赖多,创建过程繁琐,使用 ioc 提前配置好对象即可极大的简化开发,还能达到一个解耦合的效果。
在 spring 中,ioc 容器实际上是个 Map ,Map 中存放各种对象。早期的 spring 框架需要使用 xml 进行对象的配置

AOP

aop(Aspect-Oriented Programming) 面向切面的编程,将与业务无关,却要跟业务方法共同调用的逻辑或责任(事物,日志),进行封装,用增强的形式添加到业务方法,我们不需要去变动业务方法本身就可以执行这些逻辑。
在 spring 中使用 aop 可以用 Spring AOP 或 AspectJ。

AOP 术语

  • 目标 Target:被通知的对象

  • 代理 Porxy:向目标对象通知后生成的代理对象

  • 连接点 JoinPoint:目标对象所属的类中定义的方法

  • 切入点 PointCut:被拦截/增强的连接点

  • 通知 Advice:增强的逻辑/代码

  • 切面  Aspect:切入点和通知(已经切入连接点的通知)

  • 织入  Weaving:将通知应用到目标对象,进而生成代理对象的过程动作

Spring AOP 和 AspectJ AOP

Spring AOP 是运行时增强, 于 JDK 动态代理(JDK Proxy),AspectJ 则是编译时增强,是字节码操作。
有大量 AOP 操作时,建议使用 AspectJ,性能要强一些。

AspectJ 的通知类型

  • Before 前置

  • After 后置

  • BeforeReturning 返回

  • AfterThrowing 异常

  • Around 环绕


可以使用 @Order 注解规定切面的执行顺序,参数越小有限度越高,继承 Order 接口实现 getOrder()方法也有同样效果。实际上,@Order 的作用是定义Spring 容器中加载 Bean 的顺序。


面试记录:IOC 与 AOP的评论 (共 条)

分享到微博请遵守国家法律