实际上,我想调用的是一个服务方法,所以有些人说,有了常规反射,怎么能加载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的名称。