Я использую приложение Java8 / Spring Boot 2.Я хочу внедрить bean-объект в области запроса в одноэлементный компонент.Официальная документация подчеркивает необходимость использования прокси-сервера или ObjectFactory / Provider, чтобы всегда получать правильно скомпонованный компонент во время выполнения в одноэлементном компоненте.Однако аннотация @RequestScope, по-видимому, «автоматически» устанавливает какой-то прокси-сервер, как объяснено в ответе на этот вопрос .
Теперь мне интересно, находятся ли следующие три реализации вфакт идентичен и какой из них предпочтительнее?
Подход 1: явное использование objectFactory <>
@Component
@RequestScope
public class MyRequestScopedBean{...}
@Component
public class MySingletonBean{
@Autowired
private ObjectFactory<MyRequestScopedBean> myRequestScopedBean
}
Подход 2: обычное внедрение, предполагая, что bean-объект области запроса автоматически проксируется?
@Component
@RequestScope
public class MyRequestScopedBean{...}
@Component
public class MySingletonBean{
@Autowired
private MyRequestScopedBean myRequestScopedBean
}
Подход 3: использование @Configuration и @Bean, потому что я не знаю разницы, и я беспокоюсь, что они ведут себя по-разному.
@Comfiguration
public class myBeanConfig{
@Bean
@RequestScope
public MyRequestScopedBean getRequestScopedBean(){return new MyRequestScopedBean();}
}
@Component
public class MySingletonBean{
@Autowired
private MyRequestScopedBean myRequestScopedBean
}
Я бы предпочел подход 2, потому что он краткийи обрабатывает область / прокси автоматически.
Изменится ли ответ, если мой компонент @Autowired будет объявлен как поле final
?Я беспокоюсь, что окончательный вариант каким-то образом не позволяет прокси-серверу правильно выбирать новый компонент при каждом запросе.