我使用嵌套接口来存储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}"/>
但它不起作用,正确的方法是什么?
答案 0 :(得分:6)
编译代码时,Constants
接口编译为3个类文件:
那是因为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)”)
它有效,但不幸的是,它非常冗长......