class AopInvocationHandler implements InvocationHandler {

        private DeclWarpBean declWarpBean;

        public AopInvocationHandler(DeclWarpBean declWarpBean) {
            this.declWarpBean = declWarpBean;
        }

        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {<FILL_FUNCTION_BODY>}

    }

            // 获取当前调用方法，是否在被代理的对象方法里面(根据@LiteFlowMethod这个标注去判断)
            // 如果在里面，则返回那个LiteFlowMethodBean，不在则返回null
            MethodWrapBean currentMethodWrapBean = declWarpBean.getMethodWrapBeanList().stream()
                    .filter(methodWrapBean -> methodWrapBean.getLiteflowMethod().value().getMethodName().equals(method.getName()))
                    .findFirst()
                    .orElse(null);

            // 如果被代理的对象里有此标注标的方法，则调用此被代理的对象里的方法，如果没有，则调用父类里的方法
            // 进行检查，检查被代理的bean里是否第一个参数为NodeComponent这个类型的
            boolean checkFlag = currentMethodWrapBean.getMethod().getParameterTypes().length > 0
                    && currentMethodWrapBean.getMethod().getParameterTypes()[0].equals(NodeComponent.class);
            if (!checkFlag) {
                String errMsg = StrUtil.format(
                        "Method[{}.{}] must have NodeComponent parameter(first parameter is NodeComponent)",
                        declWarpBean.getRawClazz().getName(), currentMethodWrapBean.getMethod().getName());
                LOG.error(errMsg);
                throw new ComponentMethodDefineErrorException(errMsg);
            }

            try {
                if (args != null && args.length > 0){
                    Object[] wrapArgs = ArrayUtil.insert(args, 0, proxy);
                    return ReflectUtil.invoke(declWarpBean.getRawBean(), currentMethodWrapBean.getMethod(), wrapArgs);
                }else{
                    return ReflectUtil.invoke(declWarpBean.getRawBean(), currentMethodWrapBean.getMethod(), proxy);
                }
            }catch (InvocationTargetRuntimeException e) {
                InvocationTargetException targetEx = (InvocationTargetException) e.getCause();
                throw targetEx.getTargetException();
            }
        
<no_super_class>