我已经在spring申请中注册了一项服务。我有一些名称几乎相同的方法。因此,我正在使用反射来调用它们以避免使用if。下面是类似的情况。
@Service
public class MyService {
public List<String> getEmployee(String type) {
Class myServiceClass = Class.forName("MyService");
Class partypes[] = new Class[1];
partypes[0] = String.class;
Method meth = myServiceClass.getDeclaredMethod("getEmpBy"+type, partypes);
Object arglist[] = new Object[1];
arglist[0] = type;
meth.invoke(this, arglist);
}
}
现在,我有了名称为 getEmpByName,getEmpByAddress,getEmpByQualification 的方法。为了避免其他情况,我想使用反射,但是上面的代码无法在运行时加载 MyService 。
答案 0 :(得分:0)
TLDR
这种设计是可怕的。
使用界面而不是反射。
更多信息
您正在使用Spring。
Spring很高兴将依赖项注入到您的控制器中。
几乎可以肯定,与执行反射相比,Spring可以保证在注入依赖项方面做得更好。
您的服务的调用接口是固定的
(请注意,您对参数类型和参数顺序都进行了硬编码)
有趣的是,它与接口相同。