💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
~~~ ---- 创建实现MethodInterceptor接口的代理类 //不能代理被final修饰的类 太监类(不能有子类) //AOP面向切面编程(不需要修改源代码,对代码增强的一种手段) public class CglibProxy implements MethodInterceptor { //声明一个被代理对象 private Object obj; public void bind(Object obj){ this.obj=obj; } //创建一个方法,返回代理对象 public Object getProxy(){ //创建Enhancer对象。 Enhancer enhancer=new Enhancer(); //被代理对象 enhancer.setSuperclass(obj.getClass()); //设置回调 enhancer.setCallback(this); //返回代理对象 return enhancer.create(); } @Override public Object intercept(Object arg0, Method method, Object[] args, MethodProxy arg3) throws Throwable { // TODO Auto-generated method stub check(); beforeLogging(); Object returnValue = method.invoke(obj, args); afterLogging(); return returnValue; } public void check() { System.out.println("安全检查"); } public void beforeLogging() { System.out.println("事前日志"); } public void afterLogging() { System.out.println("事后日志"); } } ~~~ ~~~ //静态代理 动态代理 cglib ----spring AOP的实现原理 public class MainTest { public static void main(String[] args) { // TODO Auto-generated method stub CglibProxy cp=new CglibProxy(); cp.bind(new Person()); Object proxy = cp.getProxy();//拿到代理对象 Person p=(Person) proxy; p.eat(); } } ~~~ ~~~ //Person类 public class Person { //吃之前 检查安全性 前事日志 核心吃业务 后事日志 public void eat(){ System.out.println("吃...."); } } ~~~