从另一个类的静态方法初始化Spring bean? [英] Initializing Spring bean from static method from another Class?

查看:1148
本文介绍了从另一个类的静态方法初始化Spring bean?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I was trying to create Hibernate Validator bean, and run into this problem creating a bean from static factory method in another Class. I found a Spring way to get my Validator bean initialized (solution at the bottom), but the problem itself remains unsolved. Validator is used as example case here.

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

This is how I create the Validator instance in Java

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

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

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

This is how I tried to create the bean in applicationContext.xml

<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" />

据我所知,在factory-method中你只能访问Class中定义的静态方法在class参数中定义。由于方法buildDefaultValidatorFactory()是静态的,我无法创建验证实例并将其作为factory-bean提供给validatorFactory,如下所示:

What I understand is that in "factory-method" you can only access static methods defined in the Class defined in the "class" parameter. Since the method buildDefaultValidatorFactory() is static I cant create a instance of Validation and give it as "factory-bean" for the validatorFactory like this:

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

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

这最终会出现错误消息


检查指定名称的方法是否存在且非静态

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

Question is how would you create bean in this kind of a situation in Spring?

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

This is how I solved the Validator problem:

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


推荐答案

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

The factory-method should only contain the method name, not including the class name.

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

If you want to use a static factory, give the class of the factory(!) to the bean declaration, if you want to use an instance factory, give the factory-bean to the bean declaration, but don't give both: The class of the created bean is not given in the bean declaration.

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

So a full example should look like this, using a static factory for validatorFactory and an instance factory for 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? - 完全按照这里所示,或者你可以使用像<$ c $这样的实用程序类c> LocalValidatorFactoryBean ,它简化了Spring配置。

To answer you question - How would you create bean in this kind of a situation in Spring? - Do it exactly as shown here, or if you can, use a utility class like the LocalValidatorFactoryBean, which simplifies the Spring configuration.

这篇关于从另一个类的静态方法初始化Spring bean?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆