Proxy動態代理程式碼示例
阿新 • • 發佈:2018-12-14
一.自定義建立一個類JdkProxyFactory
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * * TODO 通過工廠生成代理物件 * 2018年10月10日下午6:42:00 */ public class JdkProxyFactory { //成員變數 private Object target;//被代理的物件 //使用有引數的構造方法設定代理物件 public JdkProxyFactory(Object target){ this.target = target; } public Object getProxyObject(){ return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("開始代理"); //增強實現 Object result = method.invoke(target, args); System.out.println("代理結束"); //增強實現 return result; } }); } }
測試:
程式碼執行後會把增強部分加進來;
/**
*
* TODO
*
* 2018年10月10日下午6:41:24
*/
public class CustomerServiceImpl implements ICustomerService {
@Override
public void save() {
System.out.println("客戶儲存了。。。。。");
}
@Override
public int find() {
System.out.println("客戶查詢數量了。。。。。");
return 100;
}
}
/** * * TODO * * 2018年10月10日下午6:46:37 */ public class Test { public static void main(String[] args) { ICustomerService customerService = new CustomerServiceImpl(); //customerService.save(); //利用代理物件工廠生成一個代理物件 JdkProxyFactory factory = new JdkProxyFactory(customerService); Object obj = factory.getProxyObject(); ICustomerService service = (ICustomerService)obj; service.save(); System.out.println("------------------"); UserService userService = new UserServiceImpl(); //userService.save(); factory = new JdkProxyFactory(userService); obj = factory.getProxyObject(); userService = (UserService)obj; userService.save(); } }