zoukankan      html  css  js  c++  java
  • CGLIB代理

    cglib和jdk代理对应,但是要实现jdk代理,其代理对象必须实现一个或多个接口,而cglib则不用实现接口,适用于没有实现接口的类的情况

    cglib需要实现MethodInterceptor接口和实现intercept()方法

    例如

    需要增强的目标类UserDao 

    public class UserDao {
    public void addUser(){
    System.out.println("添加用户");
    }
    public void deleteUser(){
    System.out.println("删除用户");
    }
    }

    切面类
    //切面类,用于增强UserDao 
    public class Myaspect {
    public void addBefore(){
    System.out.println("添加之前的检查");
    }
    public void deleteBefore(){
    System.out.println("删除之前的检查");
    }

    }
    代理类CglibProxy

    public class CglibProxy implements MethodInterceptor {

    public Object createProxy(Object target) {
    //动态类对象
    Enhancer enhancer = new Enhancer();
    //确定需要增强的类,设置成它的父类
    enhancer.setSuperclass(target.getClass());
    //添加回调函数
    enhancer.setCallback(this);
    //返回创建的代理类
    return enhancer.create();
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
    //创建切面类对象进行增强
    Myaspect myaspect = new Myaspect();
    myaspect.addBefore();
    //执行目标方法
    Object obj = methodProxy.invokeSuper(o, objects);
    myaspect.deleteBefore();
    return obj;
    }
    }

    测试
    public class CglibProxyTest {
    public static void main(String[] args) {
    //创建代理对象
    CglibProxy cglibProxy = new CglibProxy();
    //new userDao()表示目标对象
    //获取增强后的目标对象
    UserDao userDao = (UserDao) cglibProxy.createProxy(new UserDao());
    //执行方法,此时方法已经被增强了
    userDao.addUser();

    }
    }
    结果

    添加之前的检查
    添加用户
    删除之前的检查

  • 相关阅读:
    Java8 Stream Function
    PLINQ (C#/.Net 4.5.1) vs Stream (JDK/Java 8) Performance
    罗素 尊重 《事实》
    小品 《研发的一天》
    Java8 λ表达式 stream group by max then Option then PlainObject
    这人好像一条狗啊。什么是共识?
    TOGAF TheOpenGroup引领开发厂商中立的开放技术标准和认证
    OpenMP vs. MPI
    BPMN2 online draw tools 在线作图工具
    DecisionCamp 2019, Decision Manager, AI, and the Future
  • 原文地址:https://www.cnblogs.com/jasonboren/p/10565385.html
Copyright © 2011-2022 走看看