我想知道为什么@Value
属性注入在带有@Service
注释的类中带有@Bean
的类上不能起作用,
Works表示属性值不为空。
此值也注入到其他两个服务中,我在@Configuration
的调试过程中看到了该服务。但是我没有看到豆DefaultListableBeanFactory.doResolveDependency
。
配置
WebserviceEndpoint
Web服务界面
@Configuration
public class WebserviceConfig {
// do some configuration stuff
@Bean
public IWebserviceEndpoint webserviceEndpoint() {
return new WebserviceEndpoint();
}
}
网络服务类
@WebService(targetNamespace = "http://de.example/", name = "IWebservice")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface IWebserviceEndpoint {
@WebMethod
@WebResult(name = "response", targetNamespace = "http://de.example/", partName = "parameters")
public Response callWebservice(@WebParam(partName = "parameters", name = "request", targetNamespace = "http://de.example/") Request request) throws RequestFault;
}
application.yml
public class WebserviceEndpoint implements IWebserviceEndpoint {
@Value("${value.from.property}")
private String propertyValue;
}
在这种情况下何时注入@Value。
答案 0 :(得分:1)
基本上propertyValue
为null,因为Spring在bean创建之后注入值。
因此,当您这样做时:
@Bean
public IWebserviceEndpoint webserviceEndpoint() {
return new WebserviceEndpoint();
}
Spring使用propertyValue=null
创建一个新实例。
您可以使用@ConfigurationProperties
@Bean
@ConfigurationProperties(prefix=...)
public IWebserviceEndpoint webserviceEndpoint() {
return new WebserviceEndpoint();
}
请注意,propertyValue
应该有一个二传手。
您有几种方法可以解决此问题,通常最好将属性集中在一个utils类中。
@Component
public class Configs {
@Value("${propery}"
String property;
String getProperty(){
return property;
}
}
然后:
@Bean
@ConfigurationProperties(prefix=...)
public IWebserviceEndpoint webserviceEndpoint() {
WebserviceEndpoint we = new WebserviceEndpoint();
we.setProperty(configs.getProperty())
return we;
}
再次有很多不同的方法可以解决这个问题