gpt4 book ai didi

java - 方法参数注入(inject)如何在 Java 中工作

转载 作者:行者123 更新时间:2023-12-01 15:02:48 33 4
gpt4 key购买 nike

背景:在 Spring 等多个 Java 框架中,可以使用注入(inject)的参数值调用方法。一个很好的例子是 Spring Web/MVC 中的 Controller 操作,它接收 POST 值并具有重定向属性。

例子:

@RequestMapping(value = "/testform", method = RequestMethod.POST)
public ModelAndView testform(@RequestParam(value = "postvalue") String postvalue, RedirectAttributes attributes)
{
if(postvalue.equals("Test"))
{
// Do stuff with attributes
}
return new ModelAndView("addresses");
}

例如,当我想在自己的应用程序中使用类似的东西时(没有可用的 Spring)——我最终得到了类似的东西(一起被黑了):

Strign actionname = "mymethod";
Controller controller = new SampleController();
for(Method method : controller.getClass().getDeclaredMethods())
{
String name = method.getName();
if(name.equals(actionname))
{
int parametercount = method.getParameterCount();
if(parametercount == 0) // No parameter
{
ModelAndView view = (ModelAndView) method.invoke(controller);
// Do stuff
}
else if(parametercount == 1) // 1 String parameter
{
ModelAndView view = (ModelAndView) method.invoke(controller, new String("parameter1"));
// Do stuff
}
else if(parametercount == 2) // 2 String parameters
{
ModelAndView view = (ModelAndView) method.invoke(controller, new String("parameter1"), new String("parameter2"));
// Do stuff
}
else // Error
{
// Unsupported method
}
break;
}
}

问题:此解决方案仅支持将字符串作为参数的 void、1 参数和 2 参数方法 - 不支持其他

问题:Java 和 Spring 如何允许这样的功能? Spring 是否有大量适用于最常见方法的 method.invoke(...) 或者是否有更动态的解决方案来解决这个问题?

最终解决方案:我基于 Seelenvirtuose 的回答得到了这个(未完成的)解决方案:

else if(parametercount == 2)
{
Object[] parameters = new Object[2];
parameters[0] = new String("Hello");
parameters[1] = new String("world!");
method.invoke(controller, parameters);
}

最佳答案

除了任何一般的注入(inject)依赖框架(特别是 Spring),您似乎会问如何使用任意数量的参数以反射方式调用方法。

正如您在 invoke method's signature 中看到的那样,您在数组 中提供所有参数。因此,您只需组装一个参数数组并提供:

Object[] arguments = createArguments(parametercount); // create array of correct size
(ModelAndView) method.invoke(controller, arguments);

请注意,varargs 被视为 arry。哦,请尊重关于字符串行为的评论。

关于java - 方法参数注入(inject)如何在 Java 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33999306/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com