zoukankan      html  css  js  c++  java
  • Java动态代理机制——Cglib

    上一篇说过JDK动态代理机制,只能代理实现了接口的类,这就造成了限制。对于没有实现接口的类,我们可以用Cglib动态代理机制来实现。

    Cglib是针对类生成代理,主要是对用户类生成一个子类。因为有继承,所以Cglib也有个限制,就是不能代理用final修饰的类。

    定义一个具体实现类Person:

    package wang.dao;
    
    public class Person {
    	
    	public void eat()
    	{
    		System.out.println("吃的方法。。。");
    	}
    	
    	public void sleep()
    	{
    		System.out.println("睡的方法。。。");
    	}
    	
    	public void study()
    	{
    		System.out.println("学的方法。。。");
    	}
    }
    

    定义一个Cglib代理处理器:

    package wang.proxy;
    
    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 MyCglibProxy implements MethodInterceptor{
    	
    	private Object target;//定义被代理的对象
    	
    	public Object getInstance(Object target)
    	{
    	  	this.target = target;
               	Enhancer enhancer = new Enhancer();  
            		enhancer.setSuperclass(this.target.getClass());  
            		enhancer.setCallback(this);  
            		return enhancer.create();
    	}
    	
    	@Override
    	public Object intercept(Object object, Method method, Object[] args,  
                MethodProxy proxy) throws Throwable {
    		//在这里我们可以调用其他方法(切面编程的思想),这里我们只写输出语句
    		System.out.println("代理前执行的方法。。。");
    		
    		proxy.invokeSuper(object, args);
    		
    		System.out.println("代理后执行的方法。。。");
    		
    		return null;
    	}
    
    }
    

    定义测试类:

    package wang.test;
    
    import wang.dao.Person;
    import wang.proxy.MyCglibProxy;
    
    public class CglibTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		
    		MyCglibProxy proxy = new MyCglibProxy();
    		Person person = (Person) proxy.getInstance(new Person());
    		person.eat();
    		person.sleep();
    		person.study();
    
    	}
    
    }




     

  • 相关阅读:
    网站测试相关内容
    渗透测试的内容
    性能测试涉及知识点
    nginx核心反向代理
    投票活动
    数据库的框架及优化之路
    sonarqube搭建遇到的问题
    robotframework+python3+selenium之下拉框的选择---第五集
    robotframework+python3+selenium之常用情景---第四集
    robotframework+python3+selenium之创建第一个项目---第三集
  • 原文地址:https://www.cnblogs.com/wangerxiansheng/p/3836395.html
Copyright © 2011-2022 走看看