java动态代理------jdk动态代理
关于怎么使用jdk动态代理,不讲原理知识点,只讲步骤,先跑通在品原理
1、创建代理类 继承InvocationHandler ,重写invoke方法
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class proxA implements InvocationHandler { // 代理对象 Object object; // 通过构造方法传入代理对象 public proxA(Object object){ this.object = object; } @Override public Object invoke(Object o, Method method, Object[] objects) throws Throwable { doSomethingBefore(); Object obj = method.invoke(object,objects); doSomethingAfter(); return obj; } // 掉用方法前执行的方法 public void doSomethingBefore(){ System.out.println("执行方法前置通知________________________"); } // 掉用方法后执行的方法 public void doSomethingAfter(){ System.out.println("执行方法后置通知________________________"); } }
2、被代理的类 例如
// 接口 public interface PersonService { void function(); void function2(); } // 实现类 public class PersonServiceImpl implements PersonService { @Override public void function() { System.out.println(1); } @Override public void function2() { System.out.println("方法2"); } }
3、掉用执行 @RestController
public class ConProx{ @GetMapping("/prox") String doDown( @Param("cdk") String cdk , @Param("path") String path) { PersonService personService = new PersonServiceImpl(); proxA pro = new proxA(personService); PersonService store = (PersonService)Proxy.newProxyInstance(PersonServiceImpl.class.getClassLoader() ,personService.getClass().getInterfaces(),pro); System.out.println(2); store.function(); return "s"; }
4、掉用输出
2023-03-31 23:48:08.944 INFO 13348 --- [nio-8089-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms 2 执行方法前置通知________________________ 1 执行方法后置通知________________________
下一篇:
什么是前端和后端开发?