无法使Spring@Value属性注入工作
我有一个用无法使Spring@Value属性注入工作,spring,groovy,properties,dependency-injection,Spring,Groovy,Properties,Dependency Injection,我有一个用@SprintBootApplication注释的配置类,还有一个application.properties文件,位于类路径的根(resources/application.properties)中,其值为 jmx.rmi.host="localhost" 然后,我定义了一个单独的组件,用于尝试像这样的@Value注入 @Component class Props { private Map props = [:] boolean jmxEnabled S
@SprintBootApplication
注释的配置类,还有一个application.properties文件
,位于类路径的根(resources/application.properties
)中,其值为
jmx.rmi.host="localhost"
然后,我定义了一个单独的组件,用于尝试像这样的@Value
注入
@Component
class Props {
private Map props = [:]
boolean jmxEnabled
String host
@Autowired //test inject the env
Props (Environment env) {
jmxEnabled = env.getRequiredProperty("org.softwood.jmx", Boolean.class)
props[jmxEnabled]=jmxEnabled
}
void setHost (@Value ('${jmx.rmi.host}') String host) {
assert host
println "set host by injection"
this.host = host
props[host] = host
}
}
当我在“-Gstring”中尝试@Value
失败时,我的第一个问题就解决了。所以转换回“”-字符串和它的快乐
在我的示例应用程序脚本中,我获得了spring上下文和rulesEngine bean,然后尝试获得我的示例道具bean
使用autowiredenv的构造函数注入似乎可以工作。但是使用@Value
向主机注入的方法不会得到任何结果。当我尝试断言时,Host为null,而不是我所期望的“localhost”
我错过了一些简单的事情,但我看不到,有人能指出我做错了什么吗
PS:我在核心配置类上尝试了这个
@PropertySource(“classpath:application.properties”)
并尝试将其定义为bean
@Bean
static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer()
}
同样,但没有效果,我仍然使用@Value
如果您有任何帮助,我们将不胜感激将注释放在setter方法上,而不是参数上:
@Value('${jmx.rmi.host}')
void setHost (String host) {
assert host
println "set host by injection"
this.host = host
props[host] = host
}
将注释放在setter方法而不是参数上:
@Value('${jmx.rmi.host}')
void setHost (String host) {
assert host
println "set host by injection"
this.host = host
props[host] = host
}
我尝试了您所说的,但仍然得到一个null,该方法现在看起来像@Value('${jmx.rmi.host}')void setHost(String host){…注入的env在构造函数上仍然可以正常工作。您是否需要另一个注释才能从application.properties中获得@Value注入来工作?实际上,它似乎既没有,也没有。我只是断言失败,assert p.host==“localhost”,但它将注入的主机值显示为“localhost”。因此注入工作正常,但localhost不等于localhost!让我看看我的application.properties在localhost jmx.rmi.host=“localhost”周围加了引号有什么问题,因此注入的值包括“”同样。如果我从prop文件中删除引号,它会得到正确的答案。那么我的最后一个问题是:@value为什么对方法有效?但对参数无效?我可以发誓,我在其他示例中看到过参数注入样式的示例吗?我尝试了你所说的,但仍然得到null,该方法现在看起来像@value('s)${jmx.rmi.host}')void setHost(String host){…注入的环境在构造函数上仍然可以正常工作。您是否需要另一个注释来从application.properties获取@Value injection以使其工作?实际上,它似乎既不是,也不是。我只是断言失败,断言p.host==“localhost”,但它将注入的主机值显示为“localhost”。因此注入工作正常,但localhost不等于localhost!让我看看My application.properties在localhost jmx.rmi.host=“localhost”周围加了引号有什么问题,因此注入的值包括”"同样。如果我从prop文件中删除引号,它会得到正确的答案。那么我的最后一个问题是:@value为什么对方法有效?但对参数无效?我可以发誓我在其他示例中看到过参数注入样式的示例吗?将其放在setter上不会有任何作用,只需将其添加到字段或构造函数中即可。将它在setter上不起任何作用,只需将它添加到字段或构造函数中即可。