Сможет ли Spring @RequestScope автоматически обрабатывать прокси при внедрении в синглтон-бины? - PullRequest
3 голосов
/ 20 мая 2019

Я использую приложение 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?Я беспокоюсь, что окончательный вариант каким-то образом не позволяет прокси-серверу правильно выбирать новый компонент при каждом запросе.

1 Ответ

1 голос
/ 20 мая 2019

Я использовал второй подход в своих проектах, и у меня пока нет проблем. В документации не упоминается, что это ДОЛЖНО использовать ObjectFactory. Не думай слишком много. Если у вас возникнут какие-либо проблемы, вы очень четко увидите ошибку в консоли. Нет причин бояться, пока у вас не возникнет актуальная проблема.

...