当前位置: 首页 > 图灵资讯 > 技术篇> JAVA Aop与Ioc

JAVA Aop与Ioc

来源:图灵教育
时间:2023-06-17 13:48:32

  1.AOP

  基于动态代理实现Spring的面向切面编程

  ·静态代理:即手动创建的代理对象

  ·动态代理:即在程序运行中配置参生

  因此,SpringAOP是基于动态代理实现的切面编程。通过代理原始类添加额外功能,我们可以一次定义额外功能,然后配合切点实现多次使用的效果,如 做日志啊 事物啊 时间等等..提高复用性 开发效率.1.1、Spirng中有两种动态代理。1)第一个是JDK自带的动态代理

  1.JDK动态代理是利用反射机制生成实现代理界面的匿名类,在调用具体方法之前,调用InvokeHandler进行处理。

  2.需要指定类加载器,然后生成的代理对象实现类接口或类型,然后处理额外的功能。

  基于界面的JDK。2)第二种Cglib动态代理

  1.cglib是动态代理通过修改其字节码生成的子类,使用asm的开源包加载代理对象的class文件。

  2.基于继承父类的代理类Cglib。1.2、动态代理在Spirng中的使用

  1.如果目标对象实现接口,JDK的动态代理将在默认情况下实现AOP;

  2.如果目标对象实现接口,也可以强制使用CGlib实现AOP;

  3.如果目标对象没有实现接口,则必须使用Cglib库,Spirng将在JDK和CGlib之间自动切换。1.3、如何强制使用CGlib来实现AOP?

  1.添加CGlibjar包:SPRING_HOME/cglib/*.jar

  2.在Spring的配置文件中添加 ////默认是false 也就是用JDK 用Cglib将true改为true1.4、JDK和动态代理和CGlib字节码的生成区别?

  1.JDK动态代理系统可以生成代理实现接口,而不是针对类;

  2.CGLIB是针对类实现代理,主要为指定类生成子类,覆盖方法,添加额外功能。因为是继承,这种方法不能用final来说明。2.IOC(DI)2.1、什么是IOC?

  Ioc—Inversion of Control,也就是说,“控制反转”不是一种技术,而是一种设计理念。在Java开发中,物联网意味着将您设计的对象交给容器控制,而不是传统地直接控制您的对象。如何理解物联网?了解物联网的关键是要明确“谁控制谁,控制什么,为什么是逆转(如果有逆转,就应该有正转),哪些方面是逆转”。让我们深入分析一下:

  谁控制谁,控制什么:传统Java SE程序设计,我们通过new直接在对象内创建对象,是程序主动创建依赖对象;物联网有一个特殊的容器来创建这些对象,即物联网容器来控制对象的创建;谁控制谁?当然,物联网 容器控制对象;控制什么?即主要控制外部资源获取(不仅对象包括文件等)。).

  为什么是逆转,哪些方面是逆转:逆转是正的,传统的应用程序是由我们自己的主动控制来直接获得依赖对象,即正的;逆转是由容器来帮助创建和注入依赖对象;为什么是逆转?因为容器帮助我们找到和注入依赖对象,对象只是被动接受依赖对象,所以逆转;逆转了哪些方面?依赖对象的获取已经被逆转。2.2、IoC能做什么?

  IoC 它不是一种技术,而是一种思想,一个面向对象的重要规则,它可以指导我们如何设计松耦合和更好的程序。传统的应用程序是我们主动在类中创建依赖对象,导致类与类之间的高耦合,难以测试;有了物联网容器,创建和搜索依赖对象的控制权交给了容器,并将组合对象注入到容器中,因此对象和对象之间是 松散耦合,也便于测试,有利于功能再利用,更重要的是,程序的整个系统结构变得非常灵活。

  事实上,物联网给编程带来的最大变化不是在代码上,而是在思想上。应用程序最初是老板,主动获取任何资源,但在物联网/DI思想中,应用程序变得被动,被动地等待物联网容器创建和注入所需的资源。

  物联网很好地反映了面向对象的设计规则之一—— 好莱坞法则:“别找我们,我们找你”;也就是说,物联网容器帮助对象找到相应的依赖对象并注入,而不是主动找到对象。3.IoC和DI

  DI—Dependency Injection,即“依赖注入”:组件之间的依赖关系由容器在运行期间决定,即容器动态地将依赖关系注入组件。依赖注入的目的不是为了给软件系统带来更多的功能,而是为了提高组件重用的频率,为系统搭建一个灵活可扩展的平台。通过依赖注入机制,我们只需要指定目标所需的资源,而不需要任何代码来完成我们自己的业务逻辑,而不需要关心具体资源来自哪里,谁来实现。

  了解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那么我们就来深入分析一下:

  谁依赖谁:当然,应用程序依赖于物联网容器;

  为什么需要依赖:应用程序需要物联网容器来提供物体所需的外部资源;

  谁注入谁:显然是物联网容器注入应用程序的对象,应用程序依赖对象;

  注入了什么:注入对象所需的外部资源(包括对象、资源和常量数据)。

  IoC和DI有什么关系?事实上,它们是从同一概念的不同角度描述的。由于控制反转概念含糊不清(可能只是理解为容器控制对象的层面,人们很难想到谁来维持对象关系),所以2004年大师Martin Fowler给出了一个新的名字:“依赖注入”,与物联网相比 “依赖注入”明确描述了“依赖物联网容器配置依赖物联网的注入对象”。