spring 2.5 AOP之代理類基礎理解
阿新 • • 發佈:2019-01-22
JDK或者第三方控制元件動態生成代理物件的位元組碼,
使用jdk的代理類(Proxy)建立代理物件,
Proxy代理類使用前提:目標物件面向介面
//建立代理物件
public Class JDKProxyFactory implements InvocationHandler{
//定義需要生成代理物件的目標物件
private Object targetObject;
//利用目標物件生成代理物件例項
public Object createProxyInstance(Object targetObject){
this.targetObject= targetObject;
//引數:loader:當前目標物件的載入器,interfaces:當前代理物件的所有介面,實現了目標物件的所有介面
//h: invocationhandeler 回撥介面,必須實現invationhandler介面呼叫目標物件的介面方法時,會被當前代理物件攔截,進入invoke方法
return Proxy.newProxyInstance(this.targetoObject.getClass().getClassLoader(),
this.targetoObject.getClass().getInterfaces(),
this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//=============test begin===================
/**
* UserServiceImpl作為目標物件
*/
UserServiceImpl user = (UserServiceImpl) targetoObject;
/**
* 許可權控制
*/
Object resultObject = null;
if (user.getUser()!=null){
//有許可權==執行方法
resultObject = method.invoke(targetoObject, args);
}
//=============test end===================
/**
* 如果要訪問目標物件,將方法呼叫委派給目標物件
*/
/**
* arg0:目標物件
* arg1:方法的輸入引數
*/
// Object resultObject = method.invoke(targetoObject, args);
return resultObject;
}
}