• 框架-Spring


      项目中都用到了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)

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

        

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

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

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

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

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

            

            

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

           

          增强方法

          

          CGLIB动态代理

          

          

  • 相关阅读:
    vTiger 5.2+ 语言包安装教程
    linux iconv方法的使用
    php XMLWriter类的简单示例
    DIV+CSS网站导航条
    php同步方案
    PHP区间分页
    phpcms2008添加上一篇下一篇的功能
    Yii框架整合Ucenter更新与增强
    Linux openSUSE / CentOS / Slackware / Gentoo
    project mail
  • 原文地址:https://www.cnblogs.com/brucekun/p/8437139.html
Copyright © 2020-2023  润新知