gpt4 book ai didi

java - 从另一个类的静态方法初始化 Spring bean?

转载 作者:IT老高 更新时间:2023-10-28 13:04:09 25 4
gpt4 key购买 nike

我试图创建 Hibernate Validator bean,并在另一个类中从静态工厂方法创建 bean 时遇到了这个问题。我找到了一种 Spring 方法来初始化我的 Validator bean(底部的解决方案),但问题本身仍未解决。这里使用 validator 作为示例。

这就是我在 Java 中创建 Validator 实例的方式

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

这就是我尝试在 applicationContext.xml 中创建 bean 的方式

<bean id="validatorFactory" 
class="javax.validation.ValidatorFactory"
factory-method="javax.validation.Validation.buildDefaultValidatorFactory" />

<bean id="validator"
class="javax.validation.Validator"
factory-bean="validatorFactory"
factory-method="getValidator" />

我的理解是,在“工厂方法”中,您只能访问在“类”参数中定义的类中定义的静态方法。由于 buildDefaultValidatorFactory() 方法是静态的,因此我无法创建 Validation 实例并将其作为 validatorFactory 的“工厂 bean”,如下所示:

<bean id="validation" class="javax.validation.Validation" />

<bean id="validatorFactory"
class="javax.validation.ValidatorFactory"
factory-bean="validation"
factory-method="buildDefaultValidatorFactory" />

这会导致错误消息

"Check that a method with the specified name exists and that it is non-static"

问题是在 Spring 的这种情况下如何创建 bean?

这就是我解决 validator 问题的方法:

<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

最佳答案

factory-method应该只包含方法名,不包括类名。

如果您想使用静态工厂,请将工厂的 class(!)给 bean 声明,如果您想使用实例工厂,请将 factory-bean 给 bean 声明,但不要同时给: bean 声明中没有给出创建的 bean 的类。

所以一个完整的例子应该是这样的,使用 validatorFactory 的静态工厂和 validator 的实例工厂:

<bean id="validatorFactory" 
class="javax.validation.Validation"
factory-method="buildDefaultValidatorFactory" />

<bean id="validator"
factory-bean="validatorFactory"
factory-method="getValidator" />

查看文档的详细信息:

http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-class-static-factory-method

回答您的问题 - 在 Spring 的这种情况下,您将如何创建 bean? - 完全按照此处所示的方式进行操作,或者如果可以,请使用 LocalValidatorFactoryBean 之类的实用程序类,这简化了 Spring 配置。

关于java - 从另一个类的静态方法初始化 Spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9885203/

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