cglib 的动态代理

接着JDK 的动态代理的内容一起写的

①目标类

public class GirlWaiter{

    public void serve() {        System.out.println("上菜");    }}
public class Advice {    public void smile() {        System.out.println("微笑服务");    }

    public void discount() {        System.out.println("打折服务");    }}
②动态代理代码
public class test {

    public static void main(final String[] args) {        final GirlWaiter girlWaiter = new GirlWaiter();//目标对象        final Advice a = new Advice();//增强对象

        //返回值 就是动态生成的代理对象 基于cglib        //1.创建增强器        Enhancer enhancer = new Enhancer();        //2.设置父类        enhancer.setSuperclass(GirlWaiter.class);        //3.设置父类        enhancer.setCallback(new MethodInterceptor() {            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {                a.smile();                Object invoke = method.invoke(girlWaiter, args);                a.discount();                return invoke;            }        });        //4.创建代理对象        GirlWaiter proxy = (GirlWaiter) enhancer.create();        proxy.serve();    }}

原文地址:https://www.cnblogs.com/duansuzhexie/p/10964481.html

时间: 2024-10-09 01:01:18

cglib 的动态代理的相关文章

基于jdk和cglib的动态代理

动态代理是Spring Aop的基础,分为基于JDK的动态代理和基于CGLIB的动态代理. 声明一个被代理的类: package com.maheng.proxy.jdk; public interface IUser { public void save(String name); } package com.maheng.proxy.jdk; public class User implements IUser{ @Override public void save(String name)

JDK动态代理和Cglib的动态代理

最简单的是静态代理方法,即代理模式,这里就不多啰嗦了.. 重点说一下JDK的动态代理和Cglib的动态代理吧 先说JDK的,需要被代理的类需要有接口,否则无法实现 package proxy.dynamic; public interface IBook { void add(); } 实现接口的类如下 package proxy.dynamic; public class Book implements IBook { @Override public void add() { System.

好记性不如烂笔头47-java拦截器-用CGLib实现动态代理(2)

动态代理技术是整个java技术系统中非常重要的一环,它是我们能够深入学习java框架的基础,是深入了解Spring等框架时要掌握的基础知识之一. Java中自带的动态代理的类必须要实现一个接口,也就是说只能对该类所实现接口中定义的方法进行代理,这在实际编程中具有一定的局限性,而且使用反射的效率也并不是很高.于是CGLIB就诞生了. 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,理论上比使用Java反射效率要高.

cglib实现动态代理简单使用

Boss: package proxy.cglib; public class Boss{ public void findPerson() { System.out.println("我要找java架构师"); } } WebApp: package proxy.cglib; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.prox

使用CGLIB实现动态代理

参考:https://blog.csdn.net/yhl_jxy/article/details/80633194#comments CGLIB动态代理 定义:CGLIB(code genaration libary), 代码自动生成类库. 在程序运行中自动生成扩展类和实现java接口,是一个强大的高性能的代码生成包 CGLIB动态代理的实现 1).导入cglib所需的jar包 2).实现MethodIntercetor类,实现代理类对象的具体逻辑 重写intercept()方法,在interc

JDK和CGLIB生成动态代理类的区别

 关于动态代理和静态代理 当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象. 按照代理对象的创建时期不同,可以分为两种: 静态代理:程序员事先写好代理对象类,在程序发布前就已经存在了: 动态代理:应用程序发布后,通过动态创建代理对象. 其中动态代理又可分为:JDK动态代理和CGLIB代理. 1.JDK动态代理 此时代理对象和目标对象实现了相同的接口,目标对象作为代理对象的一个属性,具体接口实现中,可以在调用目标对象相应方法前

cglib的动态代理

前言 jdk中的动态代理通过反射类Proxy和InvocationHandler回调接口实现,要求委托类必须实现一个接口,只能对该类接口中定义的方法实现代理,这在实际编程中有一定的局限性. cglib实现 使用cglib[Code Generation Library]实现动态代理,并不要求委托类必须实现接口,底层采用asm字节码生成框架生成代理类的字节码,下面通过一个例子看看使用CGLib如何实现动态代理.1.定义业务逻辑 public class UserServiceImpl { publ

cgLib生成动态代理

package com.stono.cglib; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CglibProxy implements MethodInterceptor { private Enhancer

JDK动态代理和CGLIB动态代理

转载自http://www.itzhai.com/java-dong-tai-dai-li-zhi-jdk-dong-tai-dai-li-he-cglib-dong-tai-dai-li-mian-xiang-qie-mian-bian-cheng-aop-yuan-li.html 静态代理 静态代理相对来说比较简单,无非就是聚合+多态: 参考:设计模式笔记 – Proxy 代理模式 (Design Pattern) 动态代理 我们知道,通过使用代理,可以在被代理的类的方法的前后添加一些处理方