这两天研究了一下java的动态代理,写了一个小例子如下
接口:
public interface ProInterface {
void go();
void back();
}
<span style="background-color: rgb(255, 255, 255);">实现类:</span>
public class ProInterfaceImpl implements ProInterface {
private String str;
@Override
public void back() {
System.out.println("back!back!back!");
}
@Override
public void go() {
System.out.println("go!go!go!");
System.out.println(str);
}
public ProInterfaceImpl(String str){
this.str = str;
}
}
代理类:
public class ProReal implements InvocationHandler {
private Object obj;
public ProReal(Object obj){
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
method.invoke(obj, args);
return null;
}
}
测试类:
<pre name="code" class="java"> public static void main(String[] args) {
ProInterfaceImpl2 pii = new ProInterfaceImpl2("abc");
ProInterface pro = (ProInterface) Proxy.newProxyInstance(ProInterface.class.getClassLoader(), new Class [] {ProInterface.class}, new ProReal(pii));
pro.go();
pro.back();
}
之前项目中有一个授权功能,当时采用的是不同的功能跳转到不同的action,调用不同的业务层方法去处理,但是其中有一部分却是重复的代码;
现在想来,若是用代理模式去做设计会好很多