Java 春季反射误差
实际上,我想调用的是一个服务方法,所以有些人说,通过常规反射,如何加载自动连接的元素?我不熟悉spring框架。我正在开发使用SpringHibernate框架设计的web应用程序。 所以在一个例子中,我在DB中保存了类名和方法名。现在我想通过反射调用方法:Java 春季反射误差,java,spring,web-applications,reflection,Java,Spring,Web Applications,Reflection,实际上,我想调用的是一个服务方法,所以有些人说,通过常规反射,如何加载自动连接的元素?我不熟悉spring框架。我正在开发使用SpringHibernate框架设计的web应用程序。 所以在一个例子中,我在DB中保存了类名和方法名。现在我想通过反射调用方法: Class cls = Class.forName("com.xyz.pqr.Invest"); Object obj = cls.newInstance(); //call the printIt method
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);
通过从数据库中获取类名和方法名。但这并没有达到我的目的。请告知如何使用spring通过反射调用方法。我用谷歌搜索了一下,找到了一些类似于实现ApplicationContextAware的东西。但不清楚。
实际上,我想调用的是一个服务方法,所以有些人说,通过常规反射,如何加载自动连接的元素?
Invest是一个服务类,因为我们有api exec来处理一些数据
public void exex(int a, int b, String c){**}
谢谢您需要做的是让调用者应用程序ContextAware,并使用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的名称。您需要做的是使调用方应用程序ContextAware并使用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的名称。这与spring无关,您应该深入研究java反射。首先检查被调用的类是否可以从被调用方访问。实际上,我想调用的是一个服务方法,所以有些人说,通过常规反射,如何加载自动连接的元素?该方法是否可以访问?exec方法的签名是什么?什么是投资类?你提供的信息对我们来说是非常不够的。您可能需要添加更多的信息,我认为这不会起作用,因为spring使用bean的代理。Invest是一个服务类,因为我们有api exec来处理一些数据,比如exexin a、int b、String c{**}。这与spring无关,您应该深入研究java反射。首先检查被调用的类是否可以从被调用方访问。实际上,我想调用的是一个服务方法,所以有些人说,通过常规反射,如何加载自动连接的元素?该方法是否可以访问?exec方法的签名是什么?什么是投资类?你提供的信息对我们来说是非常不够的。您可能需要添加更多的信息,我认为这是行不通的,因为spring使用beans的代理。Invest是一个服务类,因为我们有api exec来处理一些数据,公共无效的EXEXEXINT a、int b、字符串c{**}