动态代理,AOP,CGLib

java的动态代理
动态代理:代理类在程序运行时创建,在内存中临时生成一个代理对象,在运行期间对业务方法进行增强。
JDK实现代理只需要使用newProxyInstance方法:

static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,   InvocationHandler h )

参数说明:
【1】ClassLoader loader:指定当前目标对象使用的类加载器
【2】Class<?>[] interfaces:目标对象实现的接口的类型
【3】InvocationHandler h:当代理对象调用目标对象的方法时,会触发事件处理器的invoke方法()
以下是JDK动态代理Demo:

public class DynamicProxyDemo {
    public static void main(String[] args) {
    //被代理的对象
    MySubject realSubject = new RealSubject();
    //调用处理器
    MyInvacationHandler handler = new MyInvacationHandler(realSubject);
    MySubject subject = (MySubject)Proxy.newProxyInstance(realSubject.getClass().getClassLoader(),realSubject.getClass().getInterfaces(), handler);
    System.out.println(subject.getClass().getName());
    subject.rent();
    }
}
interface MySubject {
    public void rent();
}
class RealSubject implements MySubject {
    @Override
    public void rent() {
        System.out.println("rent my house");
    }
}
class MyInvacationHandler implements InvocationHandler {
    private Object subject;
    public MyInvacationHandler(Object subject) {
        this.subject = subject;
    }
    @Override
    public Object invoke(Object object, Method method, Object[] args) throws Throwable {

    System.out.println("before renting house");
    //invoke方***拦截代理对象的方法调用

    Object o = method.invoke(subject, args);
    System.out.println("after rentint house");
    return o;
    }
}

Spring哪里用到了动态代理?
Spring AOP 是通过动态代理技术实现的。
什么是AOP?
AOP,面向切面编程,作为面向对象的一种补充,将公共逻辑(事务管理、日志、缓存等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度。切面就是那些与业务无关,但所有业务模块都会调用的公共逻辑。
动态代理的实现方式?
动态代理技术的实现方式有两种:
1、基于接口的 JDK 动态代理。
2、基于继承的 CGLib 动态代理。在Spring中,如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。
说一下CGlib动态代理
CGLIB(Code Generator Library)是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。CGLIB代理主要通过对字节码的操作,为对象引入间接级别,以控制对象的访问。
CGLib 动态代理相对于 JDK 动态代理局限性就小很多,目标对象不需要实现接口,底层是通过继承目标对象产生代理子对象。
](https://www.nowcoder.com/discuss/741351?type=post&order=time&pos=&page=0&ncTraceId=&channel=-1&source_id=search_post_nctrack&subType=2)

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务