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上的示例代码写的挺好的,大家没事的时候多看看.
快乐学习,快乐编程