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