抽象角色、真實角色、和代理角色。
動態代理首先也要有一個抽象角色
- //注:抽象角色:java動態代理的實現目前只支持接口,不支持抽象類
- interface BusinessFoo
- {
- void foo();
- }
- interface BusinessBar
- {
- String bar(String message);
- }
- //真實角色:真正實現業務邏輯方法
- class BusinessFooImpl implements BusinessFoo
- {
- public void foo()
- {
- System.out.println("BusinessFooImpl.foo()");
- }
- }
- class BusinessBarImpl implements BusinessBar
- {
- public String bar(String message)
- {
- System.out.println("BusinessBarImpl.bar()");
- return message;
- }
- }
- //動態角色:動態生成代理類
- class BusinessImplProxy implements InvocationHandler
- {
- private Object obj;
- BusinessImplProxy() {
- }
- BusinessImplProxy(Object obj) {
- this.obj = obj;
- }
- public Object invoke(Object proxy,Method method,Object[] args) throws Throwable
- {
- Object result = null;
- doBefore();
- result = method.invoke(obj,args);
- doAfter();
- return result;
- }
- public void doBefore(){
- System.out.println("do something before Business Logic");
- }
- public void doAfter(){
- System.out.println("do something after Business Logic");
- }
- public static Object factory(Object obj)
- {
- Class cls = obj.getClass();
- return Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new BusinessImplProxy(obj));
- }
- }
- //測試類
- public class DynamicProxy
- {
- public static void main(String[] args) throws Throwable
- {
- BusinessFooImpl bfoo = new BusinessFooImpl();
- BusinessFoo bf = (BusinessFoo)BusinessImplProxy.factory(bfoo);
- bf.foo();
- System.out.println();
- BusinessBarImpl bbar = new BusinessBarImpl();
- BusinessBar bb = (BusinessBar)BusinessImplProxy.factory(bbar);
- String message = bb.bar("Hello,World");
- System.out.println(message);
- }
- }