Java拦截器示例(实现InvocationHandler):
package com.dwen.test;
public interface IBusiness {
public void doSomething();
}
package com.dwen.test;
public class BusinessImpl implements IBusiness {
public void doSomething() {
System.out.println("业务层调用doSomething()方法");
}
}
package com.dwen.test;
public class InterceptorClass {
public void before(){
System.out.println("拦截器调用before()方法。");
}
public void after(){
System.out.println("拦截器调用after()方法。");
}
}
package com.dwen.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxyHandler implements InvocationHandler {
private Object business;
private InterceptorClass interceptor = new InterceptorClass();
public Object bind(Object business){
this.business = business;
return Proxy.newProxyInstance(business.getClass().getClassLoader(), business.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object resultObject = null;
interceptor.before();
resultObject = method.invoke(business, args);
interceptor.after();
return resultObject;
}
}
package com.dwen.test;
public class Client {
/**
* 测试
* @param args
*/
public static void main(String[] args) {
DynamicProxyHandler handler = new DynamicProxyHandler();
IBusiness business = new BusinessImpl();
IBusiness businesProxy = (IBusiness) handler.bind(business);
businesProxy.doSomething();
}
}
执行结果:
拦截器调用before()方法。
业务层调用doSomething()方法
拦截器调用after()方法。