实际对象:

 public class RealObject {
public void doSomething() {
System.out.println("RealObject.doSomething()");
}
}

CGlib代理:

 /**
* CGlib代理
*
* @author Arts&Crafts
* 要让CGlibProxyFactory这个类的对象作为代理的话,必须实现MethodInterceptor
*/
public class CglibProxy implements MethodInterceptor {
private Object proxied; public CglibProxy(Object proxied) {
this.proxied = proxied;// 被代理的对象
} /**
* 当代理对象的业务方法被调用的时候
* proxy 代理对象本身
* method 被拦截的方法
* args 方法的参数
* methodProxy 方法的代理对象
*/
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
Object result = method.invoke(proxied, args);// 调用被委托的方法
System.out.println("cglib动态代理");
System.out.println("代理类:" + proxy.getClass().getSimpleName());
System.out.println(methodProxy.getClass().getSimpleName());
return result;
}
}

CGlib代理工厂:

 /**
* CGlib代理工厂
*
* @author Arts&Crafts
*
*/
public class CglibProxyFactory {
public static Object newProxyInstance(Object target) {
// 利用CGLIB.jar组件生成动态代理对象
Enhancer hancer = new Enhancer();
// 指定代理对象的父类
hancer.setSuperclass(target.getClass());
// 代理对象
CglibProxy cglibProxy = new CglibProxy(target);
// 指定回调函数
hancer.setCallback(cglibProxy);
return hancer.create();
}
}

测试类:

 public class TestCglib {
@Test
public void test1() {
//原来的对象
RealObject r = new RealObject();
//使用原来的对象生成代理
RealObject ro = (RealObject) CglibProxyFactory.newProxyInstance(r);
ro.doSomething();
}
}

CGlib使用案例的更多相关文章

  1. Spring知识点总结(四)之SpringAOP基础 - 代理设计模式

        1. 分析程序中存在的问题(高内聚,低耦合)        通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...

  2. 【Java EE 学习 51】【Spring学习第三天】【cglib动态代理】【AOP和动态代理】【切入点表达式】

    一.cglib动态代理 1.简介 (1)CGlib是一个强大的,高性能,高质量的Code生成类库.它可以在运行期扩展Java类与实现Java接口. (2) 用CGlib生成代理类是目标类的子类. (3 ...

  3. Java动态代理与Cglib库

    JDK动态代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在 ...

  4. Spring+Mybatis+MySql+Maven 简单的事务管理案例

    利用Maven来管理项目中的JAR包,同时使用Spring在业务处理层进行事务管理.数据库使用MySq,数据处理层使用Spring和Mybatis结合. 本案例代码主要结构如图: 1.数据库脚本 -- ...

  5. JDK动态代理与Cglib库

    JDK动态代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在 ...

  6. 【转载】Ssh整合开发介绍和简单的登入案例实现

    Ssh整合开发介绍和简单的登入案例实现 Ssh整合开发介绍和简单的登入案例实现 一  介绍: Ssh是strtus2-2.3.1.2+ spring-2.5.6+hibernate-3.6.8整合的开 ...

  7. spring的IOC,DI及案例详解

    一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...

  8. JVM(Java虚拟机)优化大全和案例实战

    堆内存设置 原理 JVM堆内存分为2块:Permanent Space 和 Heap Space. Permanent 即 持久代(Permanent Generation),主要存放的是Java类定 ...

  9. 3、Spring的AOP详解和案例

    AOP(Aspect Oriented Programming),即面向切面编程. 1.OOP回顾 在介绍AOP之前先来回顾一下大家都比较熟悉的OOP(Object Oriented Programm ...

随机推荐

  1. SpringBoot 配置文件 application.properties(二)

    mvc spring.mvc.async.request-timeout设定async请求的超时时间,以毫秒为单位,如果没有设置的话,以具体实现的超时时间为准,比如tomcat的servlet3的话是 ...

  2. js提交前弹出提示框

    <form target="_blank" name="f1" method="post" action="sub2.php ...

  3. ionic2 干货

    亲爱的程序员童鞋 分享干货啦 最近在研究ionic2 ,公司也在用ionic2 和typescript,angular2以及cordova做混编APP 我的博客随笔都是随性写的,做了某个功能就想分享一 ...

  4. Linux在山Windows共享文件夹

    $ sudo mount.cifs //windows-ip/shared  /media/ -o user=username password=password 该命令挂载Windows在下面sha ...

  5. ping and traceroute(tracert)

    1.ping程序简单介绍 这个程序是Mike Muuss编写的.目的是測试另外一台机子是否可达. 运用的协议就是ICMP.运用的是ICMP的回显应答和请求回显两个类型.曾经呢.能ping通说明可以进行 ...

  6. Maven常用插件--转

    =========Maven Report Plugin========= 1.源码分析 <artifactId>maven-pmd-plugin</artifactId> 2 ...

  7. [转] restrict关键字用法

    PS: 在函数中,指针参数指定了restrict,表示这个指针指向的这段区域只能通过这个指针修改 c99中新增加了一个类型定义,就是restrict. 看了下网上的相关贴子,但还是问题解决的不够.下面 ...

  8. java中-静态代码块、构造代码块、构造方法的联系

    例如该题: 1 class Fu{ static { System.out.println("这是父类静态代码块"); } { System.out.println("这 ...

  9. solr建立索引的过程

    HttpSolrServer HttpSolrServer继承SolrServer 参考文档:http://my.oschina.net/qige/blog/173008

  10. Mac 安装maven3.3.9

    只记录一部分自己出错的内容 maven 3 与 jdk 版本的关系 之前安装的jdk是1.8 安装完maven(包括配置环境变量)之后,输入mvn -version 显示版本错误 ,百度之后发现是ma ...