1、被代理类Person.java

 package com.xiaostudy;

 /**
* @desc 被代理类
*
* @author xiaostudy
*
*/
public class Person { public void add() {
System.out.println("add()>>>>>>>>");
} public void update() {
System.out.println("update()>>>>>>>>");
} public void delete() {
System.out.println("delete()>>>>>>>>");
} }

2、切面类MyAdvice.java

 package com.xiaostudy;

 /**
* @desc 切面类
*
* @author xiaostudy
*
*/
public class MyAdvice { /**
* @desc 植入代理方法的方法
*/
public void before() {
System.out.println("日记开始>>>>>>>>>>>");
} public void after() {
System.out.println("日记结束<<<<<<<<<<<<");
} }

3、代理工厂类MyBeanFactory.java

 package com.xiaostudy;

 import java.lang.reflect.Method;

 import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy; /**
* @desc 代理工厂类
*
* @author xiaostudy
*
*/
public class MyBeanFactory {
/**
* @desc 获取一个代理的对象
*
* @return Person对象
*/
public static Person createPerson() {
// 被代理类
final Person person = new Person();
// 切面类
final MyAdvice myAdvice = new MyAdvice();
// 代理类,采用cglib
// 核心类
Enhancer enhancer = new Enhancer();
// 确定父类
enhancer.setSuperclass(person.getClass());
/*
* 设置回调函数 , MethodInterceptor接口 等效 InvocationHandler
* 接口 intercept() 等效 invoke()
* 参数1、参数2、参数3:以invoke一样
* 参数4:methodProxy 方法的代理
*/
enhancer.setCallback(new MethodInterceptor() { @Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy)
throws Throwable {
myAdvice.before();
Object obj = method.invoke(person, args);
// 这个与上面 等价
// Object obj2 = methodProxy.invokeSuper(proxy, args);
myAdvice.after();
return obj;
}
});
// 创建代理
Person obj = (Person) enhancer.create(); return obj;
} }

4、测试类Test.java

 package com.xiaostudy;

 /**
* @desc 测试类
*
* @author xiaostudy
*
*/
public class Test { public static void main(String[] args) {
Person person = MyBeanFactory.createPerson();
person.add();
person.update();
person.delete();
} }

spring的cglib代理的更多相关文章

  1. Spring强制使用CGLIB代理事务

    Spring强制使用CGLIB代理事务   springaopjdkreferenceclasspath Spring1.2: 将事务代理工厂[TransactionProxyFactoryBean] ...

  2. (转)Java动态代理与CGLib代理

    <br>public class UserDAOImpl{ <br><br>    public void save() { <br>        / ...

  3. 基于Spring AOP的JDK动态代理和CGLIB代理

    一.AOP的概念  在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...

  4. Spring框架_代理模式(静态代理,动态代理,cglib代理)

    共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下:                 ...

  5. jdk动态代理与cglib代理、spring aop代理实现原理

    原创声明:本博客来源与本人另一博客[http://blog.csdn.net/liaohaojian/article/details/63683317]原创作品,绝非他处摘取 代理(proxy)的定义 ...

  6. jdk动态代理与cglib代理、spring aop代理实现原理解析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  7. 何为代理?jdk动态代理与cglib代理、spring Aop代理原理浅析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  8. spring中基于JDK和CGLIB代理在项目的应用

    一.环境与问题 环境 spring boot的版本是1.2.1.RELEASE.JDK版本是1.7 问题 ​ A服务 PeopleService 调用B服务 HelloService ,其中B服务的方 ...

  9. Spring AOP demo 和获取被CGLIB代理的对象

    本文分为两部分:1)给出Spring AOP的一个例子(会使用CGLIB代理):2)给出获取被CGLIB代理的原始对象. 1.Spring AOP Demo 这部分参考了博文(http://www.v ...

随机推荐

  1. less.js

    在引入你自己的less文件的时候 <link rel="stylesheet/less" href="styles/site.less"> 之后再引 ...

  2. JZOJ.5246【NOIP2017模拟8.8】Trip

    Description        多年之后,worldwideD厌倦竞争,隐居山林.       他的家乡开始发展起了旅游业,在一条很长的主干道上,有N个旅游景点,按顺序编号为1到N.根据游客们网 ...

  3. 【BZOJ4627】[BeiJing2016]回转寿司 SBT

    [BZOJ4627][BeiJing2016]回转寿司 Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿司带给小Z的味觉感 ...

  4. hdu 1513 Palindrome【LCS滚动数组】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1513 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  5. 好难忘又伤心一个非常好的学习js群解散了

    不知道为什么看到web前端之天天向上这个群解散,好难过.应该可以说,这个群是我见过比较靠谱的群,大家都非常热情帮助.那些管理员管理的非常好,突然解散了.觉得好可惜,也不会因为你是菜鸟不让你加,感觉好可 ...

  6. HTTP 常见状态码

    1. 以"1"开头(临时响应) 100: Continue,请求者应当继续提出请求;表示服务端已经收到请求的一部分,正在等待其余部分; 101: Switching Protoco ...

  7. python setup.py install 报错:error: [WinError 3] 系统找不到指定的路径。: 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\PlatformSDK\\lib

    Outline 在通过 setup.py 安装python模块时,遇到了以下报错: # 执行 python setup.py install # 报错: error: [WinError 3] 系统找 ...

  8. 企业内部安全宣贯:乌云网停摆事件的思考与评论——By Me

    2016年7月20日,“自由平等开放的漏洞报告平台”乌云网[1] 被迫停摆,包括乌云网创始人方小顿[2] 在内的多名高管突然被捕.乌云的存在可以说是为了修复人们长期缺失的安全意识和堪忧的安全生态,但是 ...

  9. PAGELATCH_x和PAGEIOLATCH_x介绍

    Microsoft SQL Server企业级平台管理实践 第11章 Buffer Latch Timeout的解析 什么是PAGELATCH和PAGEIOLATCH 1.PAGELATCH_x和PA ...

  10. 在PC上调试微信手机页面的三种方法

    场景 假设一个手机页面,开发者对其做了限制,导致只能在微信客户端中打开.而众所周知手机上非常不利于调试页面,所以需要能在电脑上打开并进行调试.这里针对常见的三种页面做一下分析,一一绕过其限制,(当然不 ...