当前位置: 首页 > 面试题库 >

在运行时将参数和参数传递给工厂方法

杨选
2023-03-14
问题内容

方法context.getBean(name,user)的文档说

允许指定显式构造函数参数/工厂方法参数

但是无论我做什么(尝试一切),使用最合理的设置在初始化期间加载Bean时都会得到以下信息:

org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'fileValidator' defined in
PortletContext resource
[/WEB-INF/classes/context/customer-form-portlet.xml]: Unsatisfied
dependency expressed through constructor argument with index 0 of type
[com.liferay.portal.model.User]: Ambiguous factory method argument
types - did you specify the correct bean references as factory method
arguments?
    org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'fileValidator' defined in
PortletContext resource
[/WEB-INF/classes/context/customer-form-portlet.xml]: Unsatisfied
dependency expressed through constructor argument with index 0 of type
[com.liferay.portal.model.User]: Ambiguous factory method argument
types - did you specify the correct bean references as factory method
arguments?
<bean id="fileValidator" 
      class="cz.instance.transl.validation.file.FileValidator" 
      factory-method="createInstance" />
private FileValidator(User user) {
    this.user = user;
}

public static FileValidator createInstance(User user) {
    return new FileValidator(user);
}

注释说可以做到的,但是如果您在该bean的xml定义中指定构造函数参数,则失败。


问题答案:

在javadoc中说:

args-在使用静态工厂方法的显式参数创建原型时使用的参数。

因此,bean的定义 必须 是原型作用域的bean,即

<bean id="fileValidator" 
      scope="prototype" 
      class="cz.instance.transl.validation.file.FileValidator" 
      factory-method="createInstance" />


 类似资料:
  • 问题内容: 我很好奇Go中是否有可能。我有多种方法的类型。是否可以有一个函数,该函数需要一个方法参数,然后将其称为类型? 这是我想要的一个小例子: Go认为type 有一个称为的方法,而不是用传入的方法名称替换它。 问题答案: 是的,有可能。您有2(3)个选项: 规范:方法表达式 该表达式产生的功能与第一个参数等效,但具有一个显式接收器。它有签名。 在这里,方法接收器是显式的。您只需将方法名称(具

  • 有没有什么方法可以参数化我们传递的字符串以使用页面工厂创建页面对象? 前任: 我试图将字符串v推入@FindBy,但我得到了一个错误。 我正在获取注释属性FindBy的值。名称必须是常量表达式。

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?

  • 问题内容: 我希望能够在运行selenium时将参数传递给google chrome。我怎样才能做到这一点?运行selenium时,我使用Java命令Java -jar selenium.jar 如何将诸如no-sandbox,ignore-gpu-blacklist,enable-webgl之类的参数传递给google chrome可执行文件。谢谢 我正在用守夜人 问题答案: 您可以使用启动驱动

  • 要启动Java程序,我可以传递如下参数: 在gradle命令行中有哪些好的方法可以做到这一点: 这是正在建造的。格雷德尔: