我正在用Spring Boot开发我的第一个REST API。这是一项家庭作业,但我将其扩展为了解更多。 实际上,控制器的代码如下所示:
@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 ...)
但这是我的问题:我想在不持久的情况下做到这一点。我希望我的控制器使用相同的统计信息访问/更新相同的变量中心,但我真的不知道如何进行操作
答案 0 :(得分:3)
您可以创建一个holder对象,并将其注册到春季生命周期:
@Component
public class CentersHolder {
private Centers centers;
// getter + setter
}
然后将该组件自动连接到所需的每个控制器中。 (我建议始终使用构造函数注入,这样可以使您的代码更易于测试并且通常更安全)
private final CentersHolder holder;
@Autowired
public YourController(CentersHolder holder) {
this.holder = holder;
}
默认情况下,每个spring组件/ bean均为单例,除非您明确告诉它不为单个。因此,您的所有控制器将共享同一实例。