• java中ioc和aop是什么?【杭州多测师】【杭州多测师_王sir】


    一、什么是IOC?
    1、IoC (Inversion of control )就是控制反转/反转控制。它是一种思想不是一个技术实现。主要就是用来解决创建和管理对象的
    2、就是不需要通过new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面过去即可
    3、可以让对象之间的耦合度和依赖程度降低 
    4、使用 IoC 的思想,我们将对象的控制权(创建、管理)交有 IoC 容器去管理,我们在使用的时候直接向 IoC 容器要就可以了 二、什么是 AOP
    1、AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种延续。
    2、比如在父类 Animal 中的多个方法的相同位置出现了重复的代码,OOP 就解决不了,只能通过AOP来解决
    3、AOP 主要用来解决:在不改变原有业务逻辑的情况下,增强横切逻辑代码,从根本上解耦合,避免横切逻辑代码重复三、JAVA中实现AOP的方式有哪些?
    1、第一种是通过原生jdk实现方式,首先要定义接口,实现一个切面代理,原生的AOP需要实现InvocationHandler接口,才能实现AOP
    2、第一种是通过cglib切面来实现,相同点是都使用了代理模式,不同点是前者使用了接口代理,后者使用了继承代理,什么意思呢?四、AOP代理方式有哪些?
    1、AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表
    2、使用AspectJ的编译时增强,实现AOP,AspectJ是静态代理的增强。所谓的静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强。
    3、Spring AOP使用的是动态代理。所谓的动态代理,就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。
    4、Spring AOP中的动态代理,主要有两种方式:
    JDK动态代理和CGLIB动态代理。
    1)JDK动态代理通过“反射”来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。
    2)CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态地生成某个类的子类。注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。五、IOC控制反转的其他解释
    IoC(控制反转)就是将程序中原来 new 对象,交给spring创建,从spring工厂获取对象,使用spring来负责控制对象的生命周期和对象间的关系
    Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。六、AOP面向切面编程的相关术语
    Joinpoint(连接点):所谓连接点是指那些被拦截到的点,在Spring中,这些点指的是方法,因为Spring只支持方法类型的连接点.
    Pointcut(切入点):所谓的切入点是指我们要对哪些Joinpoint进行拦截的定义
    Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知,通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的事情)。
    Introduction(引介):引介是一种特殊的通知,在不修改类代码的前提下,Introduction可以在运行期为类动态的添加一些方法或Field。
    Target代理的目标对象。
    Weaving(织rget(目标):入):是指把增强应用到目标对象来创建的代理对象的过程,Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。
    Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类。
    Aspect(切面):是切入点和通知(引介)的结合。

  • 相关阅读:
    ALSA project the C library reference (ALSA工程 C库参考说明)
    基于Java的酒店管理系统设计与实现
    数字时代的自我呈现:探索个人形象打造的创新工具——FaceChain深度学习模型工具
    人工智能数学基础--概率与统计10:离散随机变量的概率函数及常见的二项分布、泊松分布
    java+ssm+mysql电梯管理系统
    C++11闭包函数的几种实现方法
    docker23.0.1版本修改容器存储镜像的位置在哪里改
    JVM学习----内存结构----程序计数器&虚拟机栈&本地方法栈&堆&方法区
    NAT如何配置地址转换
    【canvas】前端创造的图片粒子动画效果:HTML5 Canvas 技术详解
  • 原文地址:https://blog.csdn.net/weixin_39362573/article/details/128081228