项目结构:
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直接是类而不是接口。
截图:
原文:https://www.cnblogs.com/2312947032zyk/p/11218225.html