Почему мой Spring @Autowired json POJO имеет значение null?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему мой Spring @Autowired json POJO имеет значение null?

Сообщение Anonymous »

У меня есть класс модели данных 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»