如何在构造函数中访问应用程序属性值



我正在尝试使用@ConfigurationPropertiesapplication.properties文件中加载key-value对。

应用程序属性

soap.action.segalRead=Segal/SegalRead
soap.action.mantilUpdate=Mantil/MantilUpdate

肥皂里.java

@ConfigurationProperties(prefix = "soap.action")
public class SoapUri {
@NotNull
private String segalRead;
@NotNull
private String mantilUpdate;
//getters and setters
}

肥皂尿测试.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class SoapUriTests {
@Autowired 
private SoapUri soapUri;
@Test
public void testSoapUri_returnsSoapAction() {
assertThat(soapUri.getSegalRead()).isEqualTo("Segal/SegalRead");
assertThat(soapUri.getMantilUpdate()).isEqualTo("Mantil/MantilUpdate");
}
}

上面的单元测试效果很好。

但是,我需要在实际代码中使用SoapUri。 请考虑以下代码:

public class MantilUpdateReadVO extends RequestClientVO {
@Autowired
private SoapUri soapUri;
public MantilUpdateReadVO(final MantilUpdate mantilUpdate) {
super(mantilUpdate, soapUri.getMantilUpdate(), MantilUpdateResponse.class);
}
}
public class RequestClientVO {
private Object readRequest;
private String serviceName;
private Class<?> unmarshalTargetclass;
public MwsRequestClientVO(Object readRequest, String serviceName, Class<?> unmarshalTargetclass) {
super();
this.readRequest = readRequest;
this.serviceName = serviceName;
this.unmarshalTargetclass = unmarshalTargetclass;
}
//getters and setters
}

上面抱怨:">显式调用构造函数时无法引用实例字段soapUri">

有谁知道在constructorsuper()中注入segalReadmantilUpdate的解决方法

您正在使用字段注入,这不是一个好主意。详见Oliver Gierke的《为什么场注入是邪恶的》。

在构造实例之前,无法注入字段;因此,在构造期间不能使用注入的字段。

像这样更改代码:

@Autowired
public MantilUpdateReadVO(final SoapUri soapUri, final MantilUpdate mantilUpdate) {
super(mantilUpdate, soapUri.getMantilUpdate(), MantilUpdateResponse.class);
}

您还需要确保MantilUpdateReadVO是春豆;可能需要添加@Component

祝你好运!

相关内容

  • 没有找到相关文章

最新更新