12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package cn.nosum.framework.aop.proxy;
- import cn.nosum.framework.aop.aspect.Advice;
- import cn.nosum.framework.aop.support.AdvisedSupport;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- public class JdkDynamicAopProxy implements AopProxy,InvocationHandler {
- private AdvisedSupport config;
- public JdkDynamicAopProxy(AdvisedSupport config) {
- this.config = config;
- }
- @Override
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- Object returnValue;
- try {
- invokeAdvice(config.getAdvices(method).get("before"));
- returnValue = method.invoke(this.config.getTarget(),args);
- invokeAdvice(config.getAdvices(method).get("after"));
- }catch (Exception e){
- invokeAdvice(config.getAdvices(method).get("afterThrow"));
- throw e;
- }
- return returnValue;
- }
- private void invokeAdvice(Advice advice) {
- try {
- advice.getAdviceMethod().invoke(advice.getAspect());
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- public Object getProxy() {
- return getProxy(this.config.getTargetClass().getClassLoader());
- }
- @Override
- public Object getProxy(ClassLoader classLoader) {
- return Proxy.newProxyInstance(classLoader,this.config.getTargetClass().getInterfaces(),this);
- }
- }
|