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给出了一个新的名字:“依赖注入”,与物联网相比 “依赖注入”明确描述了“依赖物联网容器配置依赖物联网的注入对象”。