2013-05-31 36 views
1

我使用嵌套的接口來存儲字符串常量:春SPEL表達,獲得嵌套接口字符串常量

public interface Constants{ 
    interface level1 { 
     interface level2 { 
      String CONSTANT = "constant"; 
     } 
    } 
} 

我想注入這些常量成彈簧值字段,我曾嘗試:

<entry key="key" value="#{com.company.Constants.level1.level2.CONSTANT}"/> 
<entry key="key" value="#{T(com.company.Constants.level1.level2).CONSTANT}"/> 

但它不工作,什麼是正確的方法?

回答

0

內部類通常由$符號分隔而不是由點分隔。

要獲得正確的T(...)值,只需在java中調用:level2.class.getName()並使用此值。

但即時通訊不知道是否需要聲明公共接口能夠在SPEL中工作。

+0

我可以在SPeL文檔中找不到任何對$的引用,並且它不起作用。 –

+0

如果你用我簡單的主要方法寫的電話,輸出是什麼? –

4

當您編譯代碼Constants接口編譯成3類文件:

enter image description here

,這就是因爲level1嵌套接口編譯成類文件名稱爲Constants$level1level2嵌套嵌套接口編譯成名稱爲Constants$level1$level2的類文件。

現在,你知道如何把第二個嵌套level2檢索常數如下:

<entry key="key" value="#{T(com.company.Constants$level1$level2).CONSTANT}"/> 
0

這完全適用於我。 我在@PreAuthorize( 「hasAuthority(T(package.TheClass $ NestedInterface1 $ NestedInterface2 $ NestedInterface3).Constant)」),用它

它的工作原理,但不幸的是,這是非常詳細..

+0

我正在使用另一種方式 @PreAuthorize(「hasAuthority('」+ Constants.NestedInterface.Constant +「')」) – Mathew