什么是CGLIB代理模式

1.首先要实现MethodInterceptor接口

package com.DesignPattern.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 CGlibProxyFactory implements MethodInterceptor {
     private Object object;    
        public Object createStudent(Object object){    
            this.object = object;    
            Enhancer enhancer = new Enhancer();    
            enhancer.setSuperclass(object.getClass());    
            enhancer.setCallback(this);    
            return enhancer.create();    
        }    
        public Object getObject() {    
            return object;    
        }    
        public void setObject(Object object) {    
            this.object = object;    
        }    
        @Override    
        public Object intercept(Object proxy, Method method, Object[] args,    
                MethodProxy methodProxy) throws Throwable {    
            StudentBean stu = (StudentBean)object;    
            Object result = null;    
            if(stu.getName() != null)    
                result = methodProxy.invoke(object, args);    
            else    
                System.out.println("方法已经被拦截...");    
            return result;    
        }    

}

2.添加StudentBean

package com.DesignPattern.CGLIB;

public class StudentBean  {

        private String name;    

        public StudentBean(){}    

        public StudentBean(String name){
            this.name = name;
            }   

        public void print(){    
            System.out.println("Hello World!");    
        }    

        public String getName() {    
            return name;    
        }    

        public void setName(String name) {    
            this.name = name;    
        }    

}

3.测试类

package com.DesignPattern.CGLIB;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {

        CGlibProxyFactory  factory = new CGlibProxyFactory();
        StudentBean stu = new StudentBean();
        //stu.setName("熊自超");
        StudentBean proxy = (StudentBean) factory.createStudent(stu);
        proxy.print();

    }

}

4.总结

DK的动态代理依靠接口实现,如果有些类并没有实现接口,则不能使用JDK代理,这就要使用cglib动态代理了。 JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值