какой смысл определять бобы в весенней загрузке? - PullRequest
0 голосов
/ 18 октября 2019

Я новичок в мире Java и Spring Boot, поэтому некоторые очевидные вещи могут быть не столь очевидны для меня. Я надеюсь, что этот вопрос подходит для stackoverflow ...

У меня есть служба весенней загрузки, в которой есть несколько открытых контроллеров REST API и некоторые классы обслуживания, с которыми взаимодействуют эти контроллеры. Некоторые классы обслуживания совершают вызовы вне REST APis.

Я использую RestTemplate для вызовов за пределами REST apis.
Мой вопрос:
Почему мне нужно создать бин

    //resttemplate so that we can autowire it inside services
    @Bean 
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        // Do any additional configuration here
        return builder.build();
    }

и затем в моем сервисе

    @Autowired
    private RestTemplate restTemplate = new RestTemplate();

Я мог бы также использовать его с Autowiring, и тогда мне не пришлось бы создавать bean-компонент ...

Без создания bean-компонента @autowired терпит неудачу.

1 Ответ

1 голос
/ 18 октября 2019

У вас нет , чтобы создать RestTemplate как бин, если вы не хотите. Вы должны иметь RestTemplate для каждого аналогичного удаленного вызова Http, который будет выполнять ваше приложение.

Например, если ваше приложение выполняло удаленные Http-вызовы в API Facebook и вы хотели установить в качестве определенной политики кэширования ответы, вы должны создать RestTemplate с настраиваемым ClientHttpRequestFactory. И если вашему приложению также приходилось делать вызовы API GitHub, где вы хотели использовать другую политику кэширования или метод аутентификации, у вас может быть другой RestTemplate с собственным ClientHttpRequestFactory.

Но если в вашем приложении есть только стандартные удаленные вызовы Http без необходимости их настройки, вы можете создать единый шаблон RestTemplate для всего приложения и представить его в виде компонента (как вы это сделали). Если вы не хотите делать это таким образом и хотите, чтобы у каждой службы был свой собственный RestTemplate, просто удалите объявление bean-компонента и удалите @Autowired из своей службы. Тогда этот сервис будет иметь свой собственный RestTemplate.

Примечание: вы также можете использовать RestTemplate restTemplate = new RestTemplateBuilder().build(); для дополнительных настроек шаблона RestTemplate.

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