请描述 JDK 动态代理和 CGLI 代理的区别?
解析:
参考答案:JDK 的动态代理只能对实现了接口的目标类进行代理,而不实现接口的类就不能
使用 JDK 的动态代理 CGLIB 是针对类来实现代理,当没有实现接口的类需要代理时就需要
通过 CGLIB 来实现代理了,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实
现增强,但是因为采用的是继承,所以不能对 finall 类进行继承。二者在某些特殊场合需混
合使用
简述 ProxyFactoryBean 的作用是什么?
解析:
参考答案:ProxyFactoryBean 的作用是依照配置信息,将切面应用到目标对象,生成动态代
理对象。
解析:
参考答案:Spring 在生成代理对象的时候,默认情况下,会使用被代理对象的接口来生成代
理对象。如果被代理对象没有实现接口,此时,Spring 会使用 CGLIB 生成代理对象,此时该
代理对象是被代理对象的子类。
解析:
参考答案:创建代理对象需要指定的三要素是:target:设定目标对象(只能是一个);
proxyInterfaces:设定代理接口(目标对象所实现的接口);interceptorNames:设定拦截器
的名字(各个 advice 或 advisor bean 的列表)
解析:
参考答案:代理的两种方式是:静态代理和动态代理,其中静态代理针对每个具体类分别编
写代理类;针对一个接口编写一个代理类。而动态代理针对一个方面编写一个
InvocationHandler,然后借用 JDK 反射包中的 Proxy 类为各种接口动态生成相应的代理