首页 > 试题广场 >

下列关于Spring AOP的实现方式的说法中,正确的是(

[不定项选择题]
下列关于Spring AOP的实现方式的说法中,正确的是(   )
  • JDK动态代理,是Java提供的动态代理技术,可以在运行时创建接口的代理实例。
  • JDK动态代理,是Java提供的动态代理技术,可以在运行时创建子类的代理实例。
  • CGLib动态代理,采用底层的字节码技术,在运行时创建接口代理的实例。
  • CGLib动态代理,采用底层的字节码技术,在运行时创建子类代理的实例。
推荐
JDK动态代理,是Java提供的动态代理技术,可以在运行时创建接口的代理实例。Spring AOP默认采用这种方式,在接口的代理实例中织入代码。CGLib动态代理,采用底层的字节码技术,在运行时创建子类代理的实例。当目标对象不存在接口时,Spring AOP就会采用这种方式,在子类实例中织入代码。
编辑于 2021-10-15 15:00:33 回复(0)
静态代理:也就是自己手动创建的代理对象
动态代理:也就是在程序运行中通过配置参生的
那么Spring的AOP也就是面向切面编程,就是基于动态代理来实现的,通过代理原始类增加额外功能,我们可以将额外功能一次定义然后配合切点达到多次使用的效果,比如 做日志啊 事物啊 时间啊等等…提高了复用性 开发效率.

那么在Spirng当中动态代理有两种

第一种也就是JDK自带的动态代理
1.JDK动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理.需要指定一个类加载器,然后生成的代理对象实现类的接口或类的类型,接着处理额外功能.JDK是基于接口
第二只也就是Cglib的动态代理
2.Cglib是动态代理利用asm的开源包,对代理对象的Class文件加载进来,通过修改其字节码生成的子类来处理
Cglib是基于继承父类生成的代理类.
在Spirng当中动态代理的使用
1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理来实现AOP
2.如果目标对象实现了接口,也可以强制使用CGlib来实现AOP
3.如果目标对象没有实现接口,必须采用Cglib库,Spirng会自动在JDK和CGlib用切换

如何强制使用CGlib来实现AOP?
1.添加CGlibjar包:SPRING_HOME/cglib/*.jar
2.在Spring的配置文件中加入 //默认是false 也就是用JDK的 改为true就是用Cglib的

JDK和动态代理和CGlib字节码的生成区别?
1.JDK动态代理制能对实现了接口的类生成代理,而不是针对类
2.CGLIB是针对类实现代理,主要对指定的类生成一个子类,覆盖其中的方法,添加额外功能,因为是继承,所以该类方法不能用final来声明.
发表于 2023-02-12 12:09:50 回复(15)
JDK动态代理,是Java提供的动态代理对象,可以在运行时创建接口的代理实例。Spring AOP默认采用这种方式,在接口的代理实例中织入代码。CGLib动态代理,采用底层的字节码技术,在运行时创建子类的代理对象,当目标对象不存在接口时,就Spring AOP就使用这种方式,在子类实例中植入代码

发表于 2021-11-01 09:37:08 回复(5)
  • CGLIB动态代理不限定是否具有接口,可以对任意操作进行增强

  • CGLIB动态代理无需要原始被代理对象,动态创建出新的代理对象

发表于 2021-10-23 14:41:31 回复(1)
c为什么是错的?
编辑于 2024-04-02 08:08:38 回复(1)
1. 实现原理: 
    JDK动态代理是基于Java反射机制实现的,要求目标类必须实现一个或者多个接口,代理对象 在运行时动态创建,通过实现目标类接口的方式来代理目标对象. 
    CGLib代理,通过基于ASM字节码框架实现的,它代理没有实现接口的目标对象,CGlib在运行时 通过 生成目标类的子类来实现代理. 
2. 应用场景 
    JDK动态代理: 适用于代理接口的场景, 日志记录,事务 
    CGlib动态代理: 适用于普通类,但是不能使用final修饰, Spring AOP面向切面编程
发表于 2023-09-25 15:44:53 回复(0)
JDK动态代理,是Java提供的动态代理对象,可以在运行时创建接口的代理实例。Spring AOP默认采用这种方式,在接口的代理实例中织入代码。CGLib动态代理,采用底层的字节码技术,在运行时创建子类的代理对象,当目标对象不存在接口时,就Spring AOP就使用这种方式,在子类实例中织入代码!
发表于 2022-12-14 12:53:34 回复(0)
刚好避开正确答案
发表于 2025-09-20 12:32:02 回复(0)
Mark
发表于 2025-02-20 00:16:47 回复(0)
楼上回答是个屁
发表于 2022-10-12 11:07:15 回复(0)