向春豆注入财产价值

时间:2019-06-05 12:23:50

标签: spring spring-boot inversion-of-control

我想知道为什么@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。

1 个答案:

答案 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;
}

再次有很多不同的方法可以解决这个问题