zoukankan      html  css  js  c++  java
  • Cglib

        Cglib 底层通过 ASM 框架实现;

       通过实现MethodInterceptor 接口来定义横切逻辑

     实现上述接口的过程中,通过 Enhancer 设置父类,调用本身,生成代理对象。 

    测试用例

    创建代理类

    import org.springframework.cglib.proxy.Enhancer;
    import org.springframework.cglib.proxy.MethodInterceptor;
    import org.springframework.cglib.proxy.MethodProxy;
    
    public class CglibProxyFactory implements MethodInterceptor {
    
    	// 维护目标对象
    	private Object target;
    
    	public CglibProxyFactory(Object target) {
    		this.target = target;
    	}
    
    	// 给目标对象创建一个代理对象
    	public Object getProxyInstance() {
    		// 1.工具类
    		Enhancer en = new Enhancer();
    		// 2.设置父类
    		en.setSuperclass(target.getClass());
    		// 3.设置回调函数
    		en.setCallback(this);
    		// 4.创建子类(代理对象)
    		return en.create();
    
    	}
    
    	@Override
    	public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
    		
    		System.out.println("开始事务...");
    
    		// 执行目标对象的方法
    		Object returnValue = method.invoke(target, args);
    
    		System.out.println("提交事务...");
    
    		return returnValue;
    	}
    
    }
    

    测试

    public class CglibProxyAppTest {
    
    	@Test
    	public void test() {
    		// 目标对象
    		UserDao target = new UserDao();
    
    		// 代理对象
    		UserDao proxy = (UserDao) new CglibProxyFactory(target).getProxyInstance();
    
    		// 执行代理对象的方法
    		proxy.save();
    	}
    
    }
    

      

     

       

  • 相关阅读:
    LINUX和git
    drf [Django REST Framework]
    python用法小技巧
    爬虫
    django入门到精通
    前端框架
    mysql数据库
    网络编程和并发编程
    面向对象
    python基础
  • 原文地址:https://www.cnblogs.com/Jomini/p/13658921.html
Copyright © 2011-2022 走看看