Search
Duplicate
🀄

@Configuration

클래스, 인터페이스, 열거형 또는 레코드 선언에 사용되며 하나 이상의 @Bean 메소드를 포함하여 빈을 등록할 수 있게 해주는 어노테이션이다.
스프링 컨테이너는 @Bean이 붙은 메소드를 통해 빈을 생성한다.
다른 빈들과 생명주기가 같은가?라는 궁금증이 생겼는데, 얘네만 따로 관리하는 건 논리적으로 안 맞지 않을까? 같을듯
ApplicationContext@Configuration 어노테이션이 붙은 클래스 내부에서 @Bean이 붙은 메소드를 찾아 빈으로 등록한다.
@Bean이 붙은 메소드들은 자바 객체를 반환하는 메소드다.
이렇게 반환된 자바 객체는 스프링 컨테이너에 빈으로 등록된다. 이때 빈의 이름은 메소드 명이다.

Configuration의 속성

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Configuration { @AliasFor( annotation = Component.class ) String value() default ""; boolean proxyBeanMethods() default true; boolean enforceUniqueMethods() default true; }
Java
복사
value
생성된 Configuration 객체가 빈으로 등록될 때의 이름을 지정한다.
proxyBeanMethods
빈의 프록시 객체를 생성 여부를 결정한다. 기본 값은 true로 따라서 빈에 대한 프록시 객체가 기본적으로 생성된다.
Configuration 클래스을 상속한 프록시 객체가 생성되어 사용되는데, 이때 내부적으로 인스턴스 호출 시, 메소드를 가로채서 객체 생성 메소드를 한번만 호출하고 싱글톤으로 관리하기 위함이다.
이를 false로 지정하면 @Bean 메소드는 서로 다른 인스턴스를 제공한다.
enforceUniqueMethods
@Bean 메소드 이름이 고유한 값을 가져야하는지를 강제하는 함수다. 기본값은 true로 중복이 불가능하게 한다.
false로 선언하는 경우, 동일한 @Bean 메소드 정의를 오버로드된 팩토리 메소드로 해석한다.