Spring之IOC和AOP

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaoxiaoganggang/article/details/51816486
 1.简单介绍:
 Spring是一个开源框架,一个轻量级的Java 开发框架,是完全面向接口的设计,降低程序耦合性,主要是事务控制并创建bean实例对象。在整合ssh、ssm框架中主要充当黏合剂的作用。
 2.Spring框架的核心1(IOC):  
     2.1 控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,它体现了一种设计思想,一种将设计好的对象交给容器来管理,IOC的核心思想体现在*控制*、*反转*上。IOC作为一个容器,里面放的都是bean和bean之间的对应关系,bean之间的对应关系通过xml配置文件来体现。
     2.2 两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
     2.3 谁控制谁:传 统Java SE程序设计中,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IOC则有专门一个容器来创建对象,即由IOC容器来控制对象的创建。
     2.4 控制什么:主要控制了外部资源获取(不只是对象包括比如文件等)。
     2.5 反转:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
     IOC总结:对于IOC而言,它强调是将**主动**变为**被动**,由IOC容器来负责依赖对象的创建和查找,由IOC容器来进行注入组合对象。将原来的强联系、高耦合转变为了**弱关系、松耦合**。IOC最大改变是思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但在IOC/DI思想中,应用程序变为被动,被动的等待IOC容器来创建并注入所需要的资源。
   3.Spring框架的核心2(AOP):  
    3.1  介绍 :AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
    3.2  原理:AOP的做法是把目标类(又称目标对象)保存用户单独提出来,把校验,文件上传,获取用户信息当做切面,这样就很好的做到了解耦把业务逻辑和切面分离,有利于开发和后期维护!
    3.3  主要功能: 日志记录,性能统计,安全控制,事务处理,异常处理等。
    3.4  通知根据拦截目标类中的目标方法的位置不一样可以分为:**前置通知、后置通知、环绕通知、异常通知
    3.5   JDK代理: 
       1、JDK动态代理:

这里写图片描述
这里写图片描述
3.6 CGLib代理:
CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。
这里写图片描述
3.7 两种代理比较:
1. 若目标对象实现了若干接口,spring使用JDK的 java.lang.reflect.Proxy类代理。
优点 :因为有接口,所以使系统更加松耦合
缺点:为每一个目标类创建接口

      2. 若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。

优点:因为代理类与目标类是继承关系,所以不需要有接口的存在。

缺点:因为没有使用接口,所以系统的耦合性没有使用JDK的动态代理好。

猜你喜欢

转载自blog.csdn.net/yaoxiaoganggang/article/details/51816486