java中ioc和aop是什么?
一、什么是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(切面):是切入点和通知(引介)的结合。
本文来自博客园,作者:hellowworld!,转载请注明原文链接:https://www.cnblogs.com/zhangsai/p/17853500.html
posted on 2023-11-24 12:38 hellowworld! 阅读(386) 评论(0) 编辑 收藏 举报