Каковы стандартные области действия bean-компонента Spring и что произойдет, если вы внедрите bean-компонент с областью действия «prototype» в bean-компонент с областью действия «singleton»?
Области применения: singleton (по умолчанию, один экземпляр), prototype (новый экземпляр на каждый запрос), request/session/application (с поддержкой Интернета). Внедрение прототипа в синглтон решает проблему только один раз, при построении синглтона — вы молча получаете один и тот же экземпляр навсегда, если только вы не внедрите ObjectProvider или не используете прокси с ограниченной областью для получения нового каждый раз.
Пример
@WebMvcTest(OrderController.class)classOrderControllerTest {
@Autowired MockMvc mockMvc;
@MockBean OrderService orderService; // real service NOT loaded - only the web layer is@Testvoidreturns404WhenOrderMissing()throws Exception {
given(orderService.findById(1L)).willThrow(newOrderNotFoundException(1L));
mockMvc.perform(get("/api/orders/1"))
.andExpect(status().isNotFound())
.andExpect(jsonPath("$.code").value("ORDER_NOT_FOUND"));
}
}
Итог
Области применения: singleton (по умолчанию, один экземпляр), prototype (новый экземпляр на каждый запрос), request/session/application (с поддержкой Интернета).
Каковы стандартные области действия bean-компонента Spring и что пр… · Sobeso