1

我正在尝试使用一些静态方法和属性创建一个实用程序类,问题是这些属性应该从messages.properties 文件中加载,用于多语言porpouse。

我想我应该使用 MessageSourceAware 但如何保持方法静态?我越来越迷路了。。

还有更多,我怎样才能获得语言环境?我们正在使用 SessionLocaleResolver 但我认为在 jsp 中会自动加载。我怎样才能在课堂上得到它?

[谢谢,我是春天的新手]


我会试着解释得更好一点。

我有一个类定义为

public MyClass {
    protected static final MY_PROP = "this is a static property";

    protected static String getMyProp() {
        return MY_PROP;
    }
}

我想从我的messages.properties文件中注入MY_PROP,这取决于语言环境,比如

public MyClass {
    protected static final MY_PROP = messageSource.getMessage("my.prop", locale);

    protected static String getMyProp() {
        return MY_PROP;
    }
}

这有可能以某种方式吗?

4

2 回答 2

2

您是否考虑过尝试使用MethodInvokingFactoryBean

或者,您可以通过为 applicationContext.xml 注入静态属性来获得一些帮助,如下所示:-

 <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="staticMethod" value="de.inweb.blog.BadDesign.setTheProperty"/>
    <property name="arguments">
        <list>
            <ref bean="theProperty"/>
        </list>
   </property>
</bean>
于 2012-11-26T17:35:41.307 回答
0

好的,最后我实现了 MessageSourceAware,删除了静态引用并注入了我的类。

所以像:

public MyClass implements MessageSourceAware {
    // this is automatically injected by Spring
    private MessageSource messageSource;
    public void setMessageSource(MessageSource messageSource) {
        this.messageSource = messageSource;
    }
    // ###################

    protected String getMyProp(Locale locale) {
        return messageSource.getMessage("my.prop", null, locale);
    }
}

在我的 Rest 服务中,由于 RequestMapping,Locale 由 Spring 自动注入。我还注入了整个类以避免静态方法。

@Controller
public class Rest {

    @Autowired
    private MyClass myClass;

    @RequestMapping(method = RequestMethod.POST, value="/test", headers="Accept=application/json")
    public String myMethod(Locale locale) {
        return myClass.getMyProp(locale);
    }
}

这是有效的。:)

于 2012-11-27T11:51:18.533 回答