У меня есть класс модели данных NetworkSettingsModel, который должен быть одноэлементным компонентом, чтобы к нему можно было получить доступ в любом месте приложения весенней загрузки.
Его значения успешно инициализируются в сервисном классе NetworkSettingsManager. РЕДАКТИРОВАТЬ, если использование ObjectMapper не является «правильным» способом сопоставления значений с моделью, тогда я прошу, пожалуйста, скажите мне, как я могу это сделать.
Когда происходит событие Spring ApplicationReadyEvent, вызывается класс обслуживания NetworkSettingsManager.loadDefaultNetworkSettings и заполняет значения, т.е. методы установки определенно вызываются.
Однако для доступа к NetworkSettingsModel в любом другом class, мне нужно получить модель из NetworkSettingsManager. Потому что, если я внесу зависимость NetworkSettingsModel, методы получения NetworkSettingsModel вернут ноль
Если это имеет значение, это приложение javaFX
@Component
public class NetworkSettingsManager {
@Autowired
private NetworkSettingsModel networkSettingsModel;
private String fileName = "actual file location";
/**
* Constructor.
* @param networkSettingsModel the Model containing the network settings
*/
@Autowired
public NetworkSettingsManager(NetworkSettingsModel networkSettingsModel) {
this.networkSettingsModel = networkSettingsModel;
}
/**
* Load the default network settings values from the config file to the model
* @return the NetworkSettingsModel
* */
public NetworkSettingsModel loadDefaultNetworkSettings() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
InputStream inputStream = new FileInputStream(fileName);
try (inputStream) {
networkSettingsModel = objectMapper.readValue(inputStream, new TypeReference() {
});
}
}
public void getNetworkSettingsModel() {
return this.networkSettingsModel
}
Модель/POJO
@Component
public class NetworkSettingsModel {
@JsonProperty("ip_address")
private String ipAddress;
//I think same outcome whether it has a private/public constructor or none at all
/**
* Get the IP address
* @return the ip Address
*/
public String getIPAddress() {
return ipAddress;
}
/**
* Sets the IP Address
* @param the address
*/
protected void setIPAddress(String ipAddress) {
this.address = ipAddress;
}
Если я попытаюсь внедрить его в любой класс, я получу нули. например
public class SomeClass {
@Autowired
NetworkSettingsModel model;
//whether i put this in the constructor makes no difference
public void someMethod() {
model.getIpAddress();
//this value will always be null, even though this method is only being
// called long after NetworkSettingsManager.loadDefaultNetworkSettings()
//has guaranteed been called successfully
//instead have to use NetworkSettingsManager.getNetworkSettingsModel()
// to get a model that actually has values in it
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -pojo-null