spring的cglib代理


1、被代理类Person.java

1 1 package com.xiaostudy; 2 2 3 3 /** 4 4 * @desc 被代理类 5 5 * 6 6 * @author xiaostudy 7 7 * 8 8 */ 9 9 public class Person { 1010 1111 public void add() { 1212 System.out.println("add()>>>>>>>>"); 1313 } 1414 1515 public void update() { 1616 System.out.println("update()>>>>>>>>"); 1717 } 1818 1919 public void delete() { 2020 System.out.println("delete()>>>>>>>>"); 2121 } 2222 2323 }

2、切面类MyAdvice.java

1 1 package com.xiaostudy; 2 2 3 3 /** 4 4 * @desc 切面类 5 5 * 6 6 * @author xiaostudy 7 7 * 8 8 */ 9 9 public class MyAdvice { 1010 1111 /** 1212 * @desc 植入代理方法的方法 1313 */ 1414 public void before() { 1515 System.out.println("日记开始>>>>>>>>>>>"); 1616 } 1717 1818 public void after() { 1919 System.out.println("日记结束<<<<<<<<<<<<"); 2020 } 2121 2222 }

3、代理工厂类MyBeanFactory.java

1 1 package com.xiaostudy; 2 2 3 3 import java.lang.reflect.Method; 4 4 5 5 import org.springframework.cglib.proxy.Enhancer; 6 6 import org.springframework.cglib.proxy.MethodInterceptor; 7 7 import org.springframework.cglib.proxy.MethodProxy; 8 8 9 9 /** 1010 * @desc 代理工厂类 1111 * 1212 * @author xiaostudy 1313 * 1414 */ 1515 public class MyBeanFactory { 1616 /** 1717 * @desc 获取一个代理的对象 1818 * 1919 * @return Person对象 2020 */ 2121 public static Person createPerson() { 2222 // 被代理类 2323 final Person person = new Person(); 2424 // 切面类 2525 final MyAdvice myAdvice = new MyAdvice(); 2626 // 代理类,采用cglib 2727 // 核心类 2828 Enhancer enhancer = new Enhancer(); 2929 // 确定父类 3030 enhancer.setSuperclass(person.getClass()); 3131 /* 3232 * 设置回调函数 , MethodInterceptor接口 等效 InvocationHandler 3333 * 接口 intercept() 等效 invoke() 3434 * 参数1、参数2、参数3:以invoke一样 3535 * 参数4:methodProxy 方法的代理 3636 */ 3737 enhancer.setCallback(new MethodInterceptor() { 3838 3939 @Override 4040 public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) 4141 throws Throwable { 4242 myAdvice.before(); 4343 Object obj = method.invoke(person, args); 4444 // 这个与上面 等价 4545 // Object obj2 = methodProxy.invokeSuper(proxy, args); 4646 myAdvice.after(); 4747 return obj; 4848 } 4949 }); 5050 // 创建代理 5151 Person obj = (Person) enhancer.create(); 5252 5353 return obj; 5454 } 5555 5656 }

4、测试类Test.java

1 1 package com.xiaostudy; 2 2 3 3 /** 4 4 * @desc 测试类 5 5 * 6 6 * @author xiaostudy 7 7 * 8 8 */ 9 9 public class Test { 1010 1111 public static void main(String[] args) { 1212 Person person = MyBeanFactory.createPerson(); 1313 person.add(); 1414 person.update(); 1515 person.delete(); 1616 } 1717 1818 }

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

一篇文章带你了解JavaScript日期

日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang