Javaによるインターセプタのインターセプタ機能の実現
Javaの反射技術を利用
1、コネクタ
2,実装クラス
3、カスタムブロッキング
4,動的エージェント反射クラス
5,クライアント例DemoTestInterceptor
1、コネクタ
public interface AInterface
{
void a();
}
2,実装クラス
public class AImp implements AInterface
{
@Override
public void a()
{
System.out.println("aaaaaaaaaaa");
}
}
3、カスタムブロッキング
public class MyInterceptorClass
{
void before(){
System.out.println(" MyInterceptorClass : before()");
}
void post(){
System.out.println(" MyInterceptorClass : after()");
}
}
4,動的エージェント反射クラス
public class MyDynamicProxyHandler implements InvocationHandler
{
private Object obj;
//
private MyInterceptorClass interceptor = new MyInterceptorClass();
public Object bind(Object obj)
{
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
interceptor.before();
result = method.invoke(obj, args);
interceptor.post();
return null;
}
}
5,クライアント例DemoTestInterceptor
public class DemoTestInterceptor
{
public static void main(String args[]) {
//
MyDynamicProxyHandler handler = new MyDynamicProxyHandler();
//
AInterface business = new AImp();
// ,
AInterface businessProxy = (AInterface) handler.bind(business);
// ,
businessProxy.a();
}
}