jdk实现动态代理

xiaoxiao2021-02-28  130

 AOP的拦截功能是由java中的动态代理来实现的。简单的解释一下这两个概念

AOP:Aspect-Oriented Programming(面向切面的编程),简单来说,一开始横着编程,现在竖着编程(主要是Interceptor(拦截器))

动态代理:举个例子,方便理解。简单来说,就是在一个方法执行前后面加log。

下面来看看实例:

 

1.定义接口和实现

public interface UserService { public void save(); } public class UserServiceImpl implements UserService{ public void save() { System.out.println("saved"); } } 2.jdk实现动态代理

1)创建调用处理程序

public class MyInvocationHandler implements InvocationHandler { private Object target; MyInvocationHandler() { super(); } public MyInvocationHandler(Object target) { super(); this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if("save".equals(method.getName())){ System.out.println("++++++before " + method.getName() + "++++++"); Object result = method.invoke(target, args); System.out.println("++++++after " + method.getName() + "++++++"); return result; }else{ Object result = method.invoke(target, args); return result; } } } 2)创建动态代理对象

public class ProxyTest { public static void main(String[] args) { UserService userService = new UserServiceImpl(); InvocationHandler invocationHandler = new MyInvocationHandler(userService); UserService userServiceProxy = (UserService)Proxy.newProxyInstance(UserService.class.getClassLoader(), new Class[] { UserService.class }, invocationHandler); userServiceProxy.save(); } } 总结:用jdk实现动态代理,还是比较简单的,API上的示例代码写的挺好的,大家没事的时候多看看.

快乐学习,快乐编程

转载请注明原文地址: https://www.6miu.com/read-37399.html

最新回复(0)