class SpringDeclComponentParser implements DeclComponentParser {
    @Override
    public List<DeclWarpBean> parseDeclBean(Class<?> clazz) {
        return parseDeclBean(clazz, null, null);
    }

    @Override
    public List<DeclWarpBean> parseDeclBean(Class<?> clazz, final String nodeId, final String nodeName) {<FILL_FUNCTION_BODY>}

    @Override
    public int priority() {
        return 1;
    }

    public static class DeclInfo{
        private String nodeId;

        private String nodeName;

        private NodeTypeEnum nodeType;

        private Class<?> rawClazz;

        private MethodWrapBean methodWrapBean;

        public DeclInfo(String nodeId, String nodeName, NodeTypeEnum nodeType, Class<?> rawClazz, MethodWrapBean methodWrapBean) {
            this.nodeId = nodeId;
            this.nodeName = nodeName;
            this.nodeType = nodeType;
            this.rawClazz = rawClazz;
            this.methodWrapBean = methodWrapBean;
        }

        public String getNodeId() {
            return nodeId;
        }

        public void setNodeId(String nodeId) {
            this.nodeId = nodeId;
        }

        public Class<?> getRawClazz() {
            return rawClazz;
        }

        public void setRawClazz(Class<?> rawClazz) {
            this.rawClazz = rawClazz;
        }

        public String getNodeName() {
            return nodeName;
        }

        public void setNodeName(String nodeName) {
            this.nodeName = nodeName;
        }

        public MethodWrapBean getMethodWrapBean() {
            return methodWrapBean;
        }

        public void setMethodWrapBean(MethodWrapBean methodWrapBean) {
            this.methodWrapBean = methodWrapBean;
        }

        public NodeTypeEnum getNodeType() {
            return nodeType;
        }

        public void setNodeType(NodeTypeEnum nodeType) {
            this.nodeType = nodeType;
        }
    }
}

        Map<String, List<DeclInfo>> definitionMap = Arrays.stream(clazz.getMethods()).filter(
                method -> AnnotationUtil.getAnnotation(method, LiteflowMethod.class) != null
        ).map(method -> {
            LiteflowMethod liteflowMethod = AnnotationUtil.getAnnotation(method, LiteflowMethod.class);
            LiteflowRetry liteflowRetry = AnnotationUtil.getAnnotation(method, LiteflowRetry.class);

            String currNodeId = null;
            String currNodeName = null;
            if (nodeId == null){
                if (StrUtil.isBlank(liteflowMethod.nodeId())){
                    LiteflowComponent liteflowComponent = AnnoUtil.getAnnotation(clazz, LiteflowComponent.class);
                    Component component = AnnoUtil.getAnnotation(clazz, Component.class);

                    if(liteflowComponent != null){
                        currNodeId = liteflowComponent.value();
                        currNodeName = liteflowComponent.name();
                    }else if(component != null){
                        currNodeId = component.value();
                    }else{
                        currNodeName = StrUtil.EMPTY;
                        currNodeId = StrUtil.EMPTY;
                    }
                }else{
                    currNodeId = liteflowMethod.nodeId();
                    currNodeName = liteflowMethod.nodeName();
                }
            }else{
                currNodeId = nodeId;
                currNodeName = nodeName;
            }


            NodeTypeEnum nodeType;
            LiteflowCmpDefine liteflowCmpDefine = AnnotationUtil.getAnnotation(method.getDeclaringClass(), LiteflowCmpDefine.class);
            if (liteflowCmpDefine != null){
                nodeType = liteflowCmpDefine.value();
            }else{
                nodeType = liteflowMethod.nodeType();
            }

            return new DeclInfo(currNodeId, currNodeName, nodeType, method.getDeclaringClass(), new MethodWrapBean(method, liteflowMethod, liteflowRetry));
        }).filter(declInfo -> StrUtil.isNotBlank(declInfo.getNodeId())).collect(Collectors.groupingBy(DeclInfo::getNodeId));

        return definitionMap.entrySet().stream().map(entry -> {
            String key = entry.getKey();
            List<DeclInfo> declInfos = entry.getValue();
            DeclWarpBean declWarpBean = new DeclWarpBean();
            declWarpBean.setNodeId(key);

            DeclInfo processMethodDeclInfo = declInfos.stream().filter(declInfo -> declInfo.getMethodWrapBean().getLiteflowMethod().value().isMainMethod()).findFirst().orElse(null);
            if (processMethodDeclInfo == null){
                throw new CmpDefinitionException(StrUtil.format("Component [{}] does not define the process method", key));
            }

            declWarpBean.setNodeName(processMethodDeclInfo.getNodeName());
            declWarpBean.setRawClazz(processMethodDeclInfo.getRawClazz());
            declWarpBean.setNodeType(processMethodDeclInfo.getNodeType());

            RootBeanDefinition rawClassDefinition = new RootBeanDefinition(clazz);
            rawClassDefinition.setScope(ConfigurableBeanFactory.SCOPE_SINGLETON);

            declWarpBean.setRawBean(rawClassDefinition);
            declWarpBean.setMethodWrapBeanList(declInfos.stream().map(DeclInfo::getMethodWrapBean).collect(Collectors.toList()));
            return declWarpBean;
        }).collect(Collectors.toList());
    
<no_super_class>