如何在Spring` @ Value`注释中插入类常量?

时间:2017-08-10 16:15:58

标签: java spring

我想让Spring分配一个属性值。

example.property.foo

我想说我想在几个不同的地方引用public class Foobar { public static final String FOO_PROPERTY_FLAG = "example.property.foo"; } ,所以我宁愿将旗帜作为常数分配给Foobar:

example.property.foo=whatever

@TestPropertySource的设置发生在其他地方(作为系统属性,或在FOO_PROPERTY_FLAG中)。

如何在注释中引用@Value("${" + FOO_PROPERTY_FLAG + ":bar}") ?这有效:

"#{}"

但它有点难看。我能否以某种方式使用@Value("${#{FOO_PROPERTY_FLAG}:bar}") // doesn't work; value is never injected 表达式语法?

| ID |  Item  | Item Characteristic 1 | Item Characteristic 2 | Other Fields |
|:--:|:------:|:---------------------:|:---------------------:|--------------|
| 22 | Code 1 |          Blue         |           48          | …            |
| 22 | Code 2 |          Red          |           50          | …            |
| 22 | Code 3 |         Green         |           99          | …            |

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

import tkinter as tk
import tkinter.simpledialog

root = tk.Tk()

def open_sublevel():
    tl = tk.Toplevel(root)
    tl.grab_set()

    def ask():
        print(tk.simpledialog.askstring("askstring", "askstring"))
        tl.grab_set()

    tk.Button(tl, text="ask", command=ask).pack()
    print("release")

tk.Button(root, text="asdf", command=open_sublevel).pack()
tk.mainloop()

重要的是指定包和类。否则spring将尝试在public static final String KEY = "propertyName"; @Value("#{T(a.b.c.package.MyConstants).KEY}") 中查找实际执行SpEL的常量

答案 1 :(得分:0)

private @Value("${propertyName}") String propertyField;

没有吸气剂或者叮当声!

通过config:

加载属性
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location="classpath:propertyFile.properties" name="propertiesBean"/>

还有完全非Xml的版本:

@PropertySource("classpath:propertyFile.properties")
public class AppConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

确保并添加名称空间URI xmlns:p="springframework.org/schema/p";使用p:前缀属性