框架-Spring

时间:2024-10-29 08:35:56

  项目中都用到了Spring、Mybatis、SpringMVC框架,首先来谈一谈Spring框架,Spring框架以IOC、AOP作为主要思想。

  IOC----控制反转

   IOC的全称为Inversion of Control 即控制反转,这是一种思想,而不是只发具体的技术。传统方式是通过程序直接new来创建一个对象,而IOC方式是把对象的创建交由容器来管理。传统方式利用new来创建对象使得类与类之间有严重的依赖关系,那通过IOC方   式,我们可以将类之间的耦合关系解开,类与类之间松散耦合。

   通俗来说,IOC是利用Spring来控制对象的生命周期和对象之间的关系。在传统的方式中,在一个对象中,如果要使用另外的对象,那么就需要new一个另外的对象,用完后再销毁这个对象。类似于找妹子,我们去找看对眼的妹子,然后找她们要微信,求认识,然后进一步的展开追求。那IOC呢,就相当于一个媒婆,它是你找对象的中间媒介,这个媒婆手头有很多适龄男女的资料,你可以向她提关于女朋友的要求,她会为你找到一个符合你要求的对象。如果媒婆找的人不合适,我们就抛异常。

   具体说来呢,就是所有的类都会在Spring容器中进行登记,告诉Spring容器你是什么,你需要什么,然后spring会在系统运行到适当的适合把你需要的东西给你,同时也把你交给需要你的东西。所有类的创建、销毁都交给spring来控制,即控制对象生命周期的不再是引用它的对象,而是spring。对于具体对象而言,原来是它控制其他对象,现在是所有对象都被spring控制,故叫做控制反转。

    DI  依赖注入

   在系统运行中,动态的向某个对象提供它所需要的其他对象,这是通过DI(Dependency Injection)实现的。如之前对象A需要操作数据库,那么它就需要一个Connection对象,那现在spring会帮助我们在程序运行时构造一个Connection.spring就是通过反射来实现注入的。

   AOP----面向切面编程

  简单说来,AOP通过动态代理的方式,不改变源代码逻辑,在源代码基础上进行功能增强。

  传统的面向对象编程(OOP)是纵向的编程,基于子类继承父类,建立起一种对象的层次结构,适用于纵向关系,而对于一些像日志、安全性、异常处理等与对象核心功能无关的模块,OOP则没有用武之地,例如一个项目已经上线运行,但是想在这个项目代码中加入日志功能,那停掉服务器修改代码是一项得不偿失的事情了,这时候就到了AOP发挥功能的时候了。

    AOP的几个核心概念:    

    1、横切关注点

      对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

    2、切面(aspect)

      类是对物体特征的抽象,切面就是对横切关注点的抽象

    3、连接点(joinpoint)

      被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

    4、切入点(pointcut)

      对连接点进行拦截的定义

    5、通知(advice)

      所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

    6、目标对象

      代理的目标对象

    7、织入(weave)

      将切面应用到目标对象并导致代理对象创建的过程

    8、引入(introduction)

      在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段

    框架-Spring

      AOP的底层实现是基于动态代理的,动态代理技术分为两种:

       1.JDK的动态代理,这种方式要求有接口

       2.CGLIB的动态代理,这种方式没有接口,采用生成类的子类的方式

      使用JDK方式生成动态代理举例:

        在接口UserDao的实现类UserDaoImpl中定义两个方法save()和update()

        框架-Spring

        

       现在要在中间模拟记录日志功能,有接口,用jdk的动态代理方式
              构建工具类MyProxyUtils.java,InvocationHandler()为内部类

      框架-Spring

      增强方法

      框架-Spring

      CGLIB动态代理

      框架-Spring