spring的cglib代理

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代理的更多相关文章
- Spring强制使用CGLIB代理事务
Spring强制使用CGLIB代理事务 springaopjdkreferenceclasspath Spring1.2: 将事务代理工厂[TransactionProxyFactoryBean] ...
- (转)Java动态代理与CGLib代理
<br>public class UserDAOImpl{ <br><br> public void save() { <br> / ...
- 基于Spring AOP的JDK动态代理和CGLIB代理
一.AOP的概念 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的 ...
- Spring框架_代理模式(静态代理,动态代理,cglib代理)
共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下: ...
- jdk动态代理与cglib代理、spring aop代理实现原理
原创声明:本博客来源与本人另一博客[http://blog.csdn.net/liaohaojian/article/details/63683317]原创作品,绝非他处摘取 代理(proxy)的定义 ...
- jdk动态代理与cglib代理、spring aop代理实现原理解析
原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...
- 何为代理?jdk动态代理与cglib代理、spring Aop代理原理浅析
原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...
- spring中基于JDK和CGLIB代理在项目的应用
一.环境与问题 环境 spring boot的版本是1.2.1.RELEASE.JDK版本是1.7 问题 A服务 PeopleService 调用B服务 HelloService ,其中B服务的方 ...
- Spring AOP demo 和获取被CGLIB代理的对象
本文分为两部分:1)给出Spring AOP的一个例子(会使用CGLIB代理):2)给出获取被CGLIB代理的原始对象. 1.Spring AOP Demo 这部分参考了博文(http://www.v ...
随机推荐
- 编写高质量代码–改善python程序的建议(二)
原文发表在我的博客主页,转载请注明出处! 建议七:利用assert语句来发现问题断言(assert)在很多语言中都存在,它主要为调试程序服务,能够快速方便地检查程序的异常或者发现不恰当的输入等,可防止 ...
- nginx tomcat https配置方案
nginx目录下配置: ssl目录下 添加 证书和密码,如图 /etc/nginx/conf.d 下修改配置文件 HTTP域名的配置: ## Basic reverse proxy server # ...
- HDU 5677 ztr loves substring(回文串加多重背包)
ztr loves substring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- phpstorm 9.0最新 注册码
phpstorm注册码: User Name:newasp 01.License Key: ===== LICENSE BEGIN ===== 14617-12042010 00001xrVkhnPu ...
- 网络编程3 网络编程之缓冲区&subprocess&粘包&粘包解决方案
1.sub简单使用 2.粘包现象(1) 3.粘包现象(2) 4.粘包现象解决方案 5.struct学习 6.粘包现象升级版解决方案 7.打印进度条
- 【论文翻译】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文链接:https://arxi ...
- Spring 框架的核心功能之AOP技术
1. AOP 的概述 AOP, Aspect Oriented Programming, 面向切面编程; 通过预编译方式和运行期动态代理实现程序功能的统一维护的技术; AOP 采取横向抽取机制,取代了 ...
- pdb
core code: import pdb pdb.set_trace() 单步执行并进入:s 单步执行并不进入:n 下一断点:c 当前位置:where 从当前函数返回:r 退出:q pdb comm ...
- 【我的Android进阶之旅】Android使用getIdentifier()方法根据资源名来获取资源id
有时候我们想动态的根据一个资源名获得到对应的资源id,就可以使用getResources().getIdentifier()方法来获取该id.然后再使用该id进行相关的操作. 1.Demo示例 下面用 ...
- mysq查询语句包含中文以及中文乱码,字符集 GBK、GB2312、UTF8的区别
一.查看mysql 字符集设置情况 使用Navicat for Mysql查看工具,打开命令列界面,输入show variables like '%char%';如下图,查看当前mysql字符集设置情 ...