
org.nico.aoc.aspect.AspectHandlerImpl Maven / Gradle / Ivy
package org.nico.aoc.aspect;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.List;
import org.nico.aoc.aspect.AspectBuddy.ExecutionEntity.MethodWrapper;
import org.nico.aoc.aspect.point.AspectPoint;
import org.nico.aoc.aspect.point.ProcessingAspectPoint;
import org.nico.aoc.scan.entity.AspectDic;
/**
*
* @author nico
* @version createTime:2018年3月7日 下午10:40:39
*/
public class AspectHandlerImpl extends AspectHandlerInfo implements InvocationHandler{
public AspectHandlerImpl(Object aspectObj, Method aspectMethod, List beProxyMethods, Object beProxyObject, AspectDic aspectDic){
this.aspectMethod = aspectMethod;
this.aspectObj = aspectObj;
this.beProxyMethods = beProxyMethods;
this.beProxyObject = beProxyObject;
this.aspectDic = aspectDic;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
ProcessingAspectPoint point = new ProcessingAspectPoint(beProxyObject, method, args);
Object result = null;
if(beProxyMethods.contains(new MethodWrapper(method))){
if(aspectDic == AspectDic.AROUND){
result = aspectMethod.invoke(aspectObj, point);
}else if(aspectDic == AspectDic.BEFORE){
aspectMethod.invoke(aspectObj, point);
result = point.process();
}else if(aspectDic == AspectDic.AFTER){
result = point.process();
aspectMethod.invoke(aspectObj, point);
}else if(aspectDic == AspectDic.WRONG){
try{
result = point.process();
}catch(Throwable e){
aspectMethod.invoke(aspectObj, point, e);
}
}
}else{
result = point.process();
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy