[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-chem-otlichayutsya-configuration-i-component-chto-delaet-annotatsiya-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},612,"chem-otlichayutsya-configuration-i-component-chto-delaet-annotatsiya-bean",14,"spring","Spring","🌱","Чем отличаются @Configuration и @Component? Что делает аннотация @Bean?","`@Configuration` -- аннотация, указывающая, что класс содержит определения бинов (методы `@Bean`). `@Bean` -- аннотация, помечающая метод как фабричный: возвращаемый объект регистрируется как бин в контейнере.\n\nКлючевое отличие: класс с `@Configuration` обрабатывается через CGLIB-прокси, гарантируя, что вызовы методов `@Bean` внутри класса возвращают один и тот же singleton-экземпляр.\n\n```java\n@Configuration\npublic class AppConfig {\n\n    @Bean\n    public DataSource dataSource() {\n        return new HikariDataSource();\n    }\n\n    @Bean\n    public UserRepository userRepository() {\n        \u002F\u002F dataSource() НЕ создаст новый объект,\n        \u002F\u002F а вернёт тот же singleton-бин благодаря CGLIB-прокси\n        return new UserRepository(dataSource());\n    }\n}\n```\n\nЕсли использовать `@Component` вместо `@Configuration`:\n\n```java\n@Component \u002F\u002F БЕЗ CGLIB-прокси!\npublic class AppConfig {\n\n    @Bean\n    public DataSource dataSource() {\n        return new HikariDataSource();\n    }\n\n    @Bean\n    public UserRepository userRepository() {\n        \u002F\u002F ВНИМАНИЕ: dataSource() создаст НОВЫЙ экземпляр DataSource!\n        return new UserRepository(dataSource());\n    }\n}\n```\n\nЭто называется lite mode -- методы `@Bean` вызываются как обычные Java-методы, без перехвата CGLIB.\n\n> **На собеседовании:** ключевое -- CGLIB-прокси в `@Configuration`, который обеспечивает singleton-семантику при вызове `@Bean`-методов друг из друга. Частая ошибка -- не знать про lite mode и разницу в поведении.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Чем отличаются @Configuration и @Component? Что делает аннот — Gymterview","`@Configuration` -- аннотация, указывающая, что класс содержит определения бинов (методы `@Bean`). `@Bean` -- аннотация, помечающая метод как фабричный: возвращ","`@Configuration` -- аннотация, указывающая, что класс содержит определения бинов (методы `@Bean`). `@Bean` -- аннотация,",[7,13],"`@Configuration` -- аннотация, указывающая, что класс содержит определения бинов (методы `@Bean`). `@Bean` -- аннотация, помечающая метод как фабричный: возвращаемый объект регистрируется как бин в контейнере.",true]