Spring(二)

前言

我相信只要是学Java的,都有接触到Spring框架。然后Spring框架最核心的就是IOC(控制反转)和AOP(面向切面编程)。出去找工作,面试官看到你简历上写着熟悉Spring,基本都会问IOC和AOP,今天就来记录一下这两个东西吧。

IOC介绍

**IOC容器:**它是一个具有依赖注入功能的容器,可以创建对象。IOC容器负责在应用程序中实例化、定位和配置对象,并在这些对象之间建立依赖关系。通常,new实例的控制由程序员控制,“控制反转”意味着new实例的工作不是由程序员完成的,而是由spring容器完成的。在Spring中,beanfactory是IOC容器的实际代表。

**DI(依赖注入Dependency injection):**依赖注入和控制反转是同一个概念,具体的讲:当某个角色需要另一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者得工作不再由调用者来完成,因此称为控制翻转。创建被调用者的工作由spring来完成,然后注入调用者。

依赖注入的四种方式:

  1. 接口注入
  2. setter注入
  3. 构造方法注入
  4. 注解注入

ps:有兴趣可以自己学习一下,这里就一笔带过了。

AOP介绍

面向切面编程(AOP)是对面向对象编程(OOP)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,OOP是静态的抽象,AOP是动态的抽象,是对应用执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。

Spring框架的AOP机制可以让开发者把业务流程中的通用功能抽取出来,单独编写功能代码。在业务流程执行过程中,Spring框架会根据业务流程要求,自动把独立编写的功能代码切入到流程的合适位置。

AOP底层实现

首先,我们知道Spring AOP的底层实现有两种方式:一种是JDK动态代理,另一种是CGLib的方式。

JDK动态代理主要涉及到java.lang.reflect包下边的两个类:Proxy和InvocationHandler。其中,InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制条用目标类的代码,动态地将横切逻辑和业务逻辑连接在一起。

CGLib采用底层的字节码技术,全称是:Code Generation Libarary,CGLib可以为一个类创建一个子类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。

总结

IOC就是控制反转,把new对象的控制权交给了Spring容器。而AOP就是把通用的业务逻辑抽取出来,然后根据业务流程动态插入到流程的合适位置。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值