首页 > 编程语言 > 详细

spring学习之aop(cglib代理)

时间:2019-07-20 16:47:34      阅读:106      评论:0      收藏:0      [点我收藏+]

项目结构:

技术分享图片

jar包与上一个随笔一样

MyAspect.java

 1 package com.itheima.aspect;
 2 
 3 
 4 /*jdk代理
 5     切面类:可以存在多个通知Advice(增强的方法)*/
 6 public class MyAspect {
 7     public void check_Permission() {
 8         System.out.println("模拟检查权限");
 9     }
10     
11     public void log() {
12         System.out.println("模拟创建日志");
13     }
14 }

UserDao.java

 1 package com.itheima.cglib;
 2 
 3 
 4 //目标类,不用接口
 5 public class UserDao {
 6     public void addUser() {
 7         // TODO Auto-generated method stub
 8         System.out.println("添加用户");
 9     }
10 
11     
12     public void deleteUser() {
13         // TODO Auto-generated method stub
14         System.out.println("删除用户");
15     }
16 }

CglibProxy.java

 1 package com.itheima.cglib;
 2 
 3 
 4 
 5 import java.lang.reflect.Method;
 6 
 7 import org.springframework.cglib.proxy.Enhancer;
 8 import org.springframework.cglib.proxy.MethodInterceptor;
 9 import org.springframework.cglib.proxy.MethodProxy;
10 
11 import com.itheima.aspect.MyAspect;
12 
13 //代理类
14 
15 public class CglibProxy implements MethodInterceptor {
16 
17     /* 参数说明 
18      *arg0 cglib根据父类生成的代理对象
19      *arg1 拦截方法
20      *arg2 拦截的方法的参数数组
21      *arg3 方法的代理对象,执行父类方法
22      * */
23     
24     public Object createProxy(Object target) {
25         //创建一个动态对象
26         Enhancer enhancer=new Enhancer();
27         //确定需要增强的类,设置父类
28         enhancer.setSuperclass(target.getClass());
29         //添加回调函数
30         enhancer.setCallback(this);
31         return enhancer.create();
32         
33     }
34     
35     @Override
36     public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
37         // TODO Auto-generated method stub
38         
39         //创建切面对象
40         MyAspect myAspect=new MyAspect();
41         //前增强
42         myAspect.check_Permission();
43         //目标方法执行
44         Object  object=arg3.invokeSuper(arg0, arg2);
45         //后增强
46         myAspect.log();
47         return object;
48     }
49 
50 }

CglibTest.java

 1 package com.itheima.cglib;
 2 
 3 public class CglibTest {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         CglibProxy cglibProxy=new CglibProxy();
 8         UserDao userDao=new UserDao();
 9         
10         UserDao userDao1=(UserDao)cglibProxy.createProxy(userDao);
11         userDao1.addUser();
12         userDao1.deleteUser();
13         
14         
15         
16     }
17 
18 }

ps:注意UserDao直接是类而不是接口。

截图:

技术分享图片

 

spring学习之aop(cglib代理)

原文:https://www.cnblogs.com/2312947032zyk/p/11218225.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!