[Spring] @Configuration

김형진·2023년 3월 23일
1

자바 빈을 관리하는 @Configuration 어노테이션이 붙은 자바의 AppConfig class를 보면,
각 메소드의 return값은 새로운 객체이다.

그럼에도 싱글톤이 보장되기 때문에 AppConfig를 볼 때마다 의문이 들었다.

정답은 @Configuration어노테이션에 있었다.

config 파일 역시 스프링 컨테이너에 등록이 되는데, @Configuration 어노테이션이 붙은 config클래스는 사실 개발자가 직접 작성한 AppConfig 인스턴스를 그대로 등록하는 것이 아니라, Spring 내부에서 CGLIB라는 라이브러리를 사용해서 코드를 조작한 뒤 그 객체의 인스턴스를 컨테이너에 등록한다고 한다.

즉, config파일의 메소드를 그대로 호출하여 매번 new생성자를 실행시켜 새로운 객체를 반환하는 것이 아닌,

if(스프링 컨테이너에 등록이 되어있다면){
	return 스프링 컨테이너에 등록된 instance
}else{
	객체의 인스턴스를 새로 생성하여 스프링 컨테이너에 등록
    return 인스턴스
}

와 같은 코드가 호출되는 것이다.

반대로 @Configuration 어노테이션이 붙지 않으면 컨테이너에는 개발자가 작성한 AppConfig class 그대로 등록되니 매번 새로운 객체가 return된다.
@Bean 어노테이션만 사용해도 spring 빈으로 등록되긴 하지만 @Configuration이 붙지 않으면 싱글톤이 보장되지 않으니 스프링 환경에서는 기본적으로 @Configuration이 붙어야 한다.

profile
히히

0개의 댓글