代理-cglib代理
jdk的动态代理只可以为接口去完成操作,而cglib它可以为没有实现接口的类去做代理,也可以为实现接口的类去做代理。
IDB
package com.bjpowernode.proxy; /**
* 代理类和目标类都必须使用同一个接口。
*/
public interface IDB { int insert();
int delete();
int update();
}
OracleDB
package com.bjpowernode.proxy; /**
* 这是一个Oracle数据库相关的操作类
*
* 目标类(委托类)。
*/
public class OracleDB implements IDB{
public int insert(){ //以下是一个插入操作
System.out.println("Oracle insert data....");
try {
Thread.sleep(526);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 0;
} public int delete(){ //以下是一个删除操作
System.out.println("Oracle delete data....");
try {
Thread.sleep(569);
} catch (InterruptedException e) {
e.printStackTrace();
} return 0;
} public int update(){ //以下是一个更新操作
System.out.println("Oracle update data....");
try {
Thread.sleep(456);
} catch (InterruptedException e) {
e.printStackTrace();
} return 0;
} }
CglibProxyFactory
public class CglibProxyFactory implements MethodInterceptor {
    //得到目标对象
    private Object target;
    //使用构造方法传递目标对象
    public CglibProxyFactory(Object target) {
        super();
        this.target = target;
    }
    //proxy 是代理对象的引用;method 是目标类中的目标方法;args 是目标类中的目标方法的实参;参数四:需要增强的方法的代理
    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        System.out.println("这是增强方法前......");
        Object invoke = methodProxy.invoke(target, args);
        System.out.println("这是增强方法后......");
        return invoke;
    }
}
Test
import java.lang.reflect.Proxy;
public class Test {
    public static void main(String[] args) {
        //创建目标类对象
        IDB db = new OracleDB();
        //1.创建Enhancer
        Enhancer enhancer = new Enhancer();
        //2.传递目标对象的class
        enhancer.setSuperclass(db.getClass());
        //3.设置回调操作
        IDB dbProxy = (IDB)enhancer.setCallback(new CglibProxyFactory(db));
        //通过代理对象中的方法去执行目标对象中的方法。
        dbProxy.insert();
        dbProxy.delete();
        dbProxy.update();
    }
}
代理-cglib代理的更多相关文章
- 获取JDK动态代理/CGLIB代理对象代理的目标对象。
		问题描述:: 我现在遇到个棘手的问题,要通过spring托管的service类保存对象,这个类是通过反射拿到的,经过实验发现这个类只能反射取得sservice实现了接口的方法,而extends类的方法 ... 
- 动态代理+静态代理+cglib代理 详解
		代理定义:代理(Proxy):是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 动态代理+静态 ... 
- MyBatis之反射技术+JDK动态代理+cglib代理
		一.反射 引用百度百科说明: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功 ... 
- 静态代理,动态代理,Cglib代理详解
		一.静态代理 新建一个接口 定义一个玩家方法: package com."".proxy.staticc; public interface Iplayer { public vo ... 
- Java静态代理&动态代理&Cglib代理详解
		一.静态代理 根据被代理的类的时机的不同,如果在编译阶段就能确定下来的被代理的类是哪一个,那么,就可以使用静态代理的方式. 申明一个接口: /** * @author jiaqing.xu@hand- ... 
- 第八章Jdk代理 cglib代理
		什么是代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这 ... 
- 动态代理 JDK动态代理  CGLIB代理
		代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法.实际执行的是被代理类的方法. 而AOP,是通过动态代理实现的. 一.简单来说: JD ... 
- Java设计模式--代理模式+动态代理+CGLib代理
		静态代理 抽象主题角色:声明真实主题和代理主题的共同接口. 代理主题角色:代理主题内部含有对真实主题的引用,从而在任何时候操作真实主题对象:代理主题提供一个与真实主题相同的接口,以便在任何时候都可以代 ... 
- Spring框架_代理模式(静态代理,动态代理,cglib代理)
		共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下: ... 
随机推荐
- 阿里巴巴Jetcache springboot使用教程
			原文地址:https://www.jianshu.com/p/03b289439de2 springboot中使用说明 jetcache原理参见:https://www.jianshu.com/p/8 ... 
- basic-pentesting-1 靶机提权
			原文地址:https://www.payload.com.cn/ basic-pentesting-1 下载地址: https://www.vulnhub.com/entry/basic-pent ... 
- BERT模型总结
			BERT模型总结 前言  BERT是在Google论文<BERT: Pre-training of Deep Bidirectional Transformers for Language U ... 
- lua 中 . 和 : 的区别
			lua 中 . 和 : 的区别 首先在lua中使用":"定义的函数会自动传入一个名为self的变量,这个变量是隐含的,self同c++中的this一样,表示当前对象的指针:而&qu ... 
- go--->beego框架安装
			beego 安装 1.新建gopath 工程目录 2.在新建的工程目录中执行go get github.com/astaxie/beego 命令 3.再执行go get github.com/beeg ... 
- python笔记04
			数据类型(二) 今日内容 1.列表 2.元组 内容回顾和补充 1.计算机基础 ①硬件:cpu,内存,硬盘,主板,网卡 ②操作系统:linux,centos, Ubuntu,redhat windows ... 
- Spring初识、新建工程
			1.spring与三层架构的关系: spring负责管理项目中的所有对象,是一个一站式的框架,容器中的对象决定了spring的功能. 2.spring核心架构 Spring框架主要由六个模块组成,在开 ... 
- vue简介,插值表达式,过滤器
			目录 VUE框架介绍 what?什么是vue? why?为什么要学习vue? special特点? how如何使用? 下载安装? 导入方式? 挂在点el 插值表达式 delimiters自定义插值表达 ... 
- Spring-cloud微服务实战【八】:API网关zuul
			在前面的文章中,我们先后使用了eureka/ribbon/feign/hystrix搭建了一个看似完美的微服务了,那是否还有值得继续优化的地方呢?答案肯定是有的,如果从整个微服务内部来看,基本已经 ... 
- 链表基本操作与排序(c语言)
			本设计程序用C编写,完成单链表的生成,任意位置的插入.删除,以及确定某一元素在单链表中的位置.实现三种排序算法-冒泡排序.快速排序.合并排序.产生四个长度为100,1000,10000,50000的随 ... 
