Как правильно добавить значение свойства в весеннюю загрузку? - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь использовать application.properties значения файла в controller. Используя следующий код.

@Value("${app.baseURL}")
private final String BaseUrl;

Я нашел другой способ сделать это.

@Controller
public class userController {

   String BaseUrl;
    public userController(@Value("app.baseURL")String BaseUrl) {
        this.BaseUrl= BaseUrl;
    }
}

Какой эффективный способ?

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

Какой эффективный способ?

Никто из них не более эффективен.
Первый использует инжекцию поля, а второй - конструктор.

Я вижу довольно реальную разницу с точки зрения дизайна.
Первый устанавливает BaseUrl как внутреннюю зависимость, которую клиенты класса не могут установить. Только весна может.
В большинстве случаев это плохая идея, поскольку она скрывает зависимости классов.
Общая проблема с этим типом дизайна - модульное тестирование.
При написании модульного теста у вас должны быть простые и естественные способы установить зависимости тестируемого экземпляра.
Как это сделать с недоступным полем?
Отражение? Также не хорошо.
Внедрение в конструктор вашего второго кода - намного лучший способ.

0 голосов
/ 01 июля 2018

если у вас много свойств, принадлежащих друг другу, вы также можете использовать класс свойств

application.yml:

    your:
      properties:
        root: 
          path: "/root/path/to/resource"
          enabled: true
          timeout: 10

Java-класс:

    @ConfigurationProperties("your.properties.root")
    public class MyProperties {
        private String path;
        private boolean enabled;
        private int timeout;
        //getter & setter
    }

используйте конструктор для доступа к свойствам:

    @Service
    public class MyService {

      private final MyProperties properties;

      @Autowired
      public MyService(MyProperties properties) {
          this.properties = properties;
      }
    }

Вы также можете проверить классы свойств:

    @Validated
    @ConfigurationProperties("your.properties.root")
    public class MyProperties {

        @NotEmpty
        private String path;

        @NotNull
        private Boolean enabled;

        @Min(1)
        private int timeout;

        //getter & setter
    }
0 голосов
/ 30 июня 2018

Если у вас мало полей, используйте @ Value на уровне поля, а не на уровне метода. Если существует максимальное количество свойств, которое вы должны использовать, используйте autowire Environment .

@Value("${app.baseURL}")
private final String BaseUrl;

Среда Autowire

@Autowired 
Environment env;

Чтобы получить значение свойства по ключу, используя Environment

env.getProperty("some-strProp")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...