[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-kakie-sushchestvuyut-scope-u-spring-bean":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},610,"kakie-sushchestvuyut-scope-u-spring-bean",14,"spring","Spring","🌱","Какие существуют scope у Spring Bean?","Scope определяет, сколько экземпляров бина будет создано и как они будут разделяться.\n\n| Scope | Описание |\n|-------|----------|\n| singleton | (по умолчанию) Один экземпляр на весь контейнер |\n| prototype | Новый экземпляр при каждом запросе бина |\n| request | Один экземпляр на HTTP-запрос (только для веб) |\n| session | Один экземпляр на HTTP-сессию (только для веб) |\n| application | Один экземпляр на ServletContext (только для веб) |\n| websocket | Один экземпляр на WebSocket-сессию |\n\n```java\n@Component\n@Scope(\"prototype\")\npublic class PrototypeBean { }\n\n@Component\n@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)\npublic class RequestScopedBean { }\n```\n\n### Проблема singleton-prototype\n\nЕсли prototype-бин внедряется в singleton, он будет создан один раз и больше не изменится:\n\n```java\n@Component \u002F\u002F singleton по умолчанию\npublic class SingletonService {\n    @Autowired\n    private PrototypeBean prototypeBean; \u002F\u002F ПРОБЛЕМА: всегда один и тот же экземпляр!\n}\n```\n\n### Решения\n\n```java\n\u002F\u002F 1. Через ObjectProvider\n@Component\npublic class SingletonService {\n    @Autowired\n    private ObjectProvider\u003CPrototypeBean> prototypeBeanProvider;\n\n    public void doWork() {\n        PrototypeBean bean = prototypeBeanProvider.getObject(); \u002F\u002F каждый раз новый\n    }\n}\n\n\u002F\u002F 2. Через scoped proxy\n@Component\n@Scope(value = \"prototype\", proxyMode = ScopedProxyMode.TARGET_CLASS)\npublic class PrototypeBean { }\n\n\u002F\u002F 3. Через lookup method\n@Component\npublic abstract class SingletonService {\n    @Lookup\n    public abstract PrototypeBean getPrototypeBean();\n}\n```\n\n> **На собеседовании:** ключевой вопрос -- проблема внедрения prototype в singleton и способы её решения. Частая ошибка -- не знать, что по умолчанию scope -- singleton, и не понимать последствия внедрения prototype в singleton.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":19,"keywords":20,"schemaAnswer":19,"featuredSnippetReady":21},"Какие существуют scope у Spring Bean? — Gymterview","Scope определяет, сколько экземпляров бина будет создано и как они будут разделяться.",[7,13],true]