春天反射误差



实际上,我想调用的是一个服务方法,所以有些人说,有了常规反射,怎么能加载autowired元素?我是spring框架的新手。我正在使用Spring-hibernate框架设计web应用程序。所以在一种情况下,我保存类名和方法名在DB。现在我想通过反射调用方法:

 Class cls = Class.forName("com.xyz.pqr.Invest");

    Object obj = cls.newInstance();
    //call the printIt method
    Method method = cls.getDeclaredMethod("exec", noparams);
    method.invoke(obj, null);

通过从DB中获取类名和方法名。但这并没有达到我的目的。请告诉如何调用方法通过反射使用spring。我在谷歌上搜索了一下,发现了一些类似于实现ApplicationContextAware的东西。但不是很清楚。实际上,我想调用的是一个服务方法,所以有些人说,有了常规反射,怎么能加载自动连接的元素?Invest是一个服务类,因为我们有api exec来处理一些数据

public void exex(int a, int b, String c){**}

谢谢

你需要做的是让你的调用者ApplicationContextAware,并使用getBean()方法来获得Invest类的实例,而不是cls.newInstance()

如下所示;

public TheCaller implements org.springframework.context.ApplicationContextAware {
    /** The spring application context */
    @Autowired
    private org.springframework.context.ApplicationContext springContext;
    public void callService(String serviceName, String theClass, String methodName) {
       Class cls = Class.forName(theClass);
       Object obj = applicationContext.getBean(serviceName); // Or use applicationContext.getBeansOfType(cls)
       Method method = cls.getDeclaredMethod(methodName, noparams);
       method.invoke(obj, null);
    }    
}

serviceName是spring中配置的bean的名称。

相关内容

  • 没有找到相关文章

最新更新