System.out.println("before...");
obj = method.invoke(target,args);
System.out.println("after...");
}
else
{
obj = method.invoke(target,args);
}
return obj;
}
}
class Main//测试
{
public static void main(String[] args)
{
SubjectImpl subimpl = new SubjectImpl();
InvocationHandlerImpl handler = new InvocationHandlerImpl(subimpl);
Subject sub = (Subject)Proxy.newProxyInstance(subimpl.getClass().getClassLoader(),
subimpl.getClass().getInterfaces(),handler);
sub.fun();
}
}
class InvocationHandlerImpl implements InvocationHandler
{
private Object target = null;
InvocationHandlerImpl(Object target)
{
this.target = target;
}
public Object invoke(Object proxy,Method method,Object[] args)throws Throwable
{
Object obj = null;
if(method.getName().equals("fun"))
{
System.out.println("before...");
obj = method.invoke(target,args);
System.out.println("after...");
}
else
{
obj = method.invoke(target,args);
}
return obj;
}
}
class Main//测试
{
public static void main(String[] args)
{
SubjectImpl subimpl = new SubjectImpl();
InvocationHandlerImpl handler = new InvocationHandlerImpl(subimpl);
Subject sub = (Subject)Proxy.newProxyInstance(subimpl.getClass().getClassLoader(),
subimpl.getClass().getInterfaces(),handler);
sub.fun();
}
}
2. 通过匿名内部类方式使用:
[java]
class Main
{
public static void main(String[] args)
{
final SubjectImpl sub = new SubjectImpl();
Subject su = (Subject)Proxy.newProxyInstance(sub.getClass().getClassLoader(),
sub.getClass().getInterfaces(),new InvocationHandler()
{
public Object invoke(Object proxy,Method method,Object[] args)throws Throwable
{
Object obj = null;
if(method.getName().equals("func"))
{
System.out.println("before...");
obj = method.invoke(sub,args);
System.out.println("after...");
}
else
{
obj = method.invoke(sub,args);
}
return obj;
}
}
);
su.fun();
}
}
class Main
{
public static void main(String[] args)
{
final SubjectImpl sub = new SubjectImpl();
Subject su = (Subject)Proxy.newProxyInstance(sub.getClass().getClassLoader(),
sub.getClass().getInterfaces(),new InvocationHandler()
{
public Object invoke(Object proxy,Method method,Object[] args)throws Throwable
{
Object obj = null;
if(method.getName().equals("func"))
{
System.out.println("before...");
obj = method.invoke(sub,args);
System.out