@ Значение с синглтоном в Java - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть класс ResourcesProperties. java

@NoArgsConstructor
@PropertySource("classpath:config.properties")
@Component
public class ResourcesProperties {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyConf() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    public static ResourcesProperties instance;

    @Bean
    public static ResourcesProperties getInstance() {
        if (instance == null)
            instance = new ResourcesProperties();
        return instance;
    }

    @Getter
    @Value("${room.rightStatusRoom}")
    private static boolean rightStatusRoom;

    @Getter
    @Value("${room.countGuests}")
    private static int countGuests;
}

Существует файл свойств "config.properties"

room.rightStatusRoom=true
room.countGuests=101

Почему при доступе к полям с помощью @Value аннотации, они не возвращают указанные значения из файла свойств?

Пример:

if(ResourcesProperties.getInstance().isRightStatusRoom()) { //returned false instead true
    //business-logic
}

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Spring не позволяет ввести значение в объект c. Таким образом, у вас есть 2 варианта: избавиться от stati c или вызвать установщик non-stati c, который устанавливает переменную stati c. Больше информации можно найти здесь: https://mkyong.com/spring/spring-inject-a-value-into-static-variables/

Так что это решения.
Решение 1:

@NoArgsConstructor
@PropertySource("classpath:config.properties")
@Component
public class ResourcesProperties {

    @Getter
    @Value("${room.rightStatusRoom}")
    private boolean rightStatusRoom;

    @Getter
    @Value("${room.countGuests}")
    private int countGuests;
}

Решение 2:

@NoArgsConstructor
@PropertySource("classpath:config.properties")
@Component
public class ResourcesProperties {

    @Getter
    private static boolean rightStatusRoom;

    @Getter
    private static int countGuests;

    @Value("${room.rightStatusRoom}")
    public void setRightStatusRoom(boolean rightStatusRoom) {
        this.rightStatusRoom = rightStatusRoom
    }

    @Value("${room.countGuests}")
    public void setCountGuests(int countGuests) {
        this.countGuests = countGuests
    }
}
0 голосов
/ 06 февраля 2020

Мое решение:

@NoArgsConstructor
@PropertySource("classpath:config.properties")
@Component
public class ResourcesProperties {

    @Getter
    @Value("${room.rightStatusRoom}")
    private boolean rightStatusRoom;

    @Getter
    @Value("${room.countGuests}")
    private int countGuests;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...