Spring SPEL表达式,访问嵌套接口String常量

时间:2013-05-31 04:44:54

标签: java spring spring-el

我使用嵌套接口来存储String常量:

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

我想将这些常量注入spring值字段,我尝试过:

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

但它不起作用,正确的方法是什么?

3 个答案:

答案 0 :(得分:6)

编译代码时,Constants接口编译为3个类文件:

enter image description here

那是因为level1嵌套接口编译成名为Constants$level1的类文件,level2嵌套嵌套接口编译成名为Constants$level1$level2的类文件。

现在您知道如何引用第二个嵌套level2检索常量,如下所示:

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

答案 1 :(得分:0)

内部类通常用$符号分隔,而不是用点分隔。

要获取正确的T(...)值,只需在java中调用:level2.class.getName()并使用此值。

但我不确定界面是否需要公开才能在SPEL中工作。

答案 2 :(得分:0)

这对我来说很有效。 我在@PreAuthorize中使用它(“hasAuthority(T(package.TheClass $ NestedInterface1 $ NestedInterface2 $ NestedInterface3).Constant)”)

它有效,但不幸的是,它非常冗长......