2012-11-26 41 views
1

我想創建一個實用程序類與一些靜態方法和屬性,問題是這些屬性應該從messages.properties文件,多語言porpouse加載。如何在Spring中注入靜態屬性?

我想我應該使用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; 
    } 
} 

這是可能的soomehow?

回答

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); 
    } 
} 

,在我休息服務的區域設置會自動由Spring注入,感謝RequestMapping。我也注入了整個類以避免靜態方法。

@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); 
    } 
} 

這是行得通的。 :)

2

有你在試圖通過injectng靜態屬性爲您的applicationContext.xml這樣使用MethodInvokingFactoryBean

OR你可以得到一些幫助,認爲: -

<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> 
+0

感謝您的回答。我編輯了這個問題,使其更加清晰。你能幫我瞭解如何使用MethodInvokingFactoryBean來獲得結果嗎?該文件似乎並不清楚我.. – Enrichman

相關問題