JAVA动态代理

2014-11-24 07:23:36 · 作者: · 浏览: 0

[java]
package com.xk.dao;

public interface Count {

public void queryCount();

}
package com.xk.dao;

public interface Count {

public void queryCount();

}[java]
package com.xk.dao.impl;

import com.xk.dao.Count;

public class CountImpl implements Count {

public void queryCount() {
System.out.println("Query Count Now!");
}

}
package com.xk.dao.impl;

import com.xk.dao.Count;

public class CountImpl implements Count {

public void queryCount() {
System.out.println("Query Count Now!");
}

}
[java]
package com.xk.dao.impl;

import java.lang.reflect.Proxy;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationHandler;

public class CountProxy implements InvocationHandler {

private Object target = null;

public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result=null;
System.out.println("Transcation Before!");
result=method.invoke(target, args);
System.out.println("Transcation End!");
return result;

}

public Object getTarget() {
return target;
}

public void setTarget(Object target) {
this.target = target;
}

}
package com.xk.dao.impl;

import java.lang.reflect.Proxy;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationHandler;

public class CountProxy implements InvocationHandler {

private Object target = null;

public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result=null;
System.out.println("Transcation Before!");
result=method.invoke(target, args);
System.out.println("Transcation End!");
return result;

}

public Object getTarget() {
return target;
}

public void setTarget(Object target) {
this.target = target;
}

}

[java]
package com.xk.test;

import com.xk.dao.Count;
import com.xk.dao.impl.CountImpl;
import com.xk.dao.impl.CountProxy;

public class testCountDao {

public static void main(String[] args){
CountProxy xp = new CountProxy();
Count c = (Count)(xp.bind(new CountImpl()));
c.queryCount();
}

}


摘自 xiakan008的专栏