根据不同的接口编码调用对应的实现类

1、枚举类

public enum TestEnums {

    C00001("接口A","com.xxx.impl.CodeProcessorImplA"),
    C00002("接口B","com.xxx.impl.CodeProcessorImplB");

    private final String desc;
    private final String className;

    TestEnums(String desc, String className) {
        this.desc = desc;
        this.className = className;
    }

    public String getDesc() {
        return desc;
    }

    public String getClassName() {
        return className;
    }
}

2、编码接收层Service

public interface CodeReceiverService {
    String process(String code);
}

3、编码接收层Impl

import org.springframework.beans.factory.annotation.Autowired;

@Service
public class CodeReceiverServiceImpl implements CodeReceiverService {

    @Autowired
    private ServiceFactory serviceFactory;
    
    @Override
    public String process(String code) {
        TestEnums testEnums = TestEnums.valueOf(code);
        CodeProcessorService service = serviceFactory.getService(testEnums);
        return service.execute(code);
    }
}

4、工厂类方法:获取对应已经初始化的Bean

@Component
public class ServiceFactory {

    @Autowired
    private ApplicationContext context;

    public CodeProcessorService getService(TestEnums code) {
        try {
            Class<?> aClass = Class.forName(code.getClassName());
            //注意:return (CodeProcessorService ) clazz.newInstance();
            //使用Class.newInstance()方法生成实例后,其内部的@Autowired注解不会生效,所以注入的值会为null,导致获取不到属性信息,
			//@Autowired注解依赖于Spring的IoC容器来解析并注入对应的Bean,而使用Class.newInstance()是直接调用类的无参构造函数来实例化对象,生成实例则绕过了Spring的依赖注入环节,从而不会进行任何初始化操作。
            return (CodeProcessorService) context.getBean(aClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

6、逻辑处理层Service

public interface CodeProcessorService {
    String execute(String code);
}

6、C00001编码对应实现类A

@Service
public class CodeProcessorImplA implements CodeProcessorService {
    @Override
    public String execute(String code) {
        return "==========CodeProcessorImplA==========";
    }
}

7、C00002编码对应实现类B

@Service
public class CodeProcessorImplB implements CodeProcessorService {
    @Override
    public String execute(String code) {
        return "==========CodeProcessorImplB==========";
    }
}

测试代码

 String C00001= codeReceiverService.process("COO0O1");
 System.out.println(C00001);