Доступ к переменной из всех моих контроллеров - PullRequest
3 голосов
/ 03 апреля 2019

Я разрабатываю свой первый REST API с помощью Spring Boot.Это была домашняя работа, но я расширил ее, чтобы узнать больше.На самом деле код контроллера выглядит следующим образом:

@RestController
@EnableAutoConfiguration
@EnableSwagger2
@Api(description = "API pour l'ensemble des opérations")
public class MyServiceController {
public static void main(String[] args) throws Exception {
    SpringApplication.run(MyServiceController.class, args);
}

private Centers centers;

public MyServiceController() {
    Cage usa = new Cage(
            "usa",
            new Position(49.305d, 1.2157357d),
            25,
            new LinkedList<>(Arrays.asList(
                    new Animal("Tic", "usa", "Chipmunk", UUID.randomUUID()),
                    new Animal("Tac", "usa", "Chipmunk", UUID.randomUUID())
            ))
    );

    Cage amazon = new Cage(
            "amazon",
            new Position(49.305142d, 1.2154067d),
            15,
            new LinkedList<>(Arrays.asList(
                    new Animal("Canine", "amazon", "Piranha", UUID.randomUUID()),
                    new Animal("Incisive", "amazon", "Piranha", UUID.randomUUID()),
                    new Animal("Molaire", "amazon", "Piranha", UUID.randomUUID()),
                    new Animal("De lait", "amazon", "Piranha", UUID.randomUUID())
            ))
    );

    this.centers = new Centers();
    this.centers.addCenter(new Center(new LinkedList<>(),
            new Position(49.30494d, 1.2170602d), "Biotropica"));
    this.centers.getCenter()
            .stream()
            .findFirst()
            .get()
            .getCages()
            .addAll(Arrays.asList(usa, amazon));
}

// -----------------------------------------------------------------------------------------------------------------
// /animals
@ApiOperation(value="Récupère l'ensemble des animaux")
@RequestMapping(path = "/animals", method = GET, produces = APPLICATION_JSON_VALUE)
public Centers getAnimals(){
    return this.centers;
}...

Таким образом, как вы можете видеть, на самом деле центры хранятся в переменной (без постоянства!).Теперь я хочу вывести некоторые операции (например, каждый запрос на / animals для AnimalsController ...)

Но вот моя проблема: я хочу сделать это без настойчивости.Я хочу, чтобы мой контроллер обращался к / обновлял тот же самый центр переменных с той же статистикой, и я действительно не вижу, как я продолжаю

1 Ответ

3 голосов
/ 03 апреля 2019

Вы можете создать объект-держатель и зарегистрировать его в жизненном цикле пружины:

@Component
public class CentersHolder {
     private Centers centers;

     // getter + setter
}

А затем автоматически подключите этот компонент к каждому необходимому контроллеру. (Я советую всегда использовать инжектор конструктора, что делает ваш код более простым для тестирования и в целом более безопасным)

private final CentersHolder holder;

@Autowired
public YourController(CentersHolder holder) {
    this.holder = holder;
}

По умолчанию каждый компонент / bean-компонент Spring является синглтоном, если вы явно не укажете, что он не один. Таким образом, все ваши контроллеры будут использовать один и тот же экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...