@Configuration 주석 이유
631
17 asked
두가지 질문이 있는데요
MySpringBootMain띄울때 HelloConfig 클래스에 @Configuration 이 있어도 잘 동작 하던데 주석 처리하는 이유가 뭔지 알 수 있을까요?
다른 질문인데요 @Configuration안에 @Component가 있어서 @Component 대신 @Configuration을 써도 되는것 같던데 빈여러개 등록할때 말고 하나의 클래스를 빈으로 등록할때 @Component 대신 @Configuration을 사용하지 않는 이유가 뭘까요...?찾아봐도 잘 안나와서 질문 드립니다.
Answer 2
1
안녕하세요.
지나가다가 도움드리려고 답변남깁니다.
1.강사님께서 주석처리한 이유는 이미 @MySpringBootApplication 어노테이션으로 인해 HelloController 클래스가 빈으로 등록되기 때문에 HelloConfig 에서 또 빈으로 등록할 필요가 없기때문에 그렇습니다. 말씀하신데로 Configuration 주석을 해제해도 문제는 없습니다. 빈객체는 싱글톤으로 등록되기 때문이죠. 다시말해 configuration을 주석처리 하지않으면 빈등록 시도를 2번 하는거고 실제론 싱글톤 패턴으로인해 빈객체가 1개만 생성된것입니다.
2.이 이유는 어노테이션마다 암묵적인 사용목적이 있기 때문입니다. 다른 개발자들에게 이 클래스가 만들어진 이유를 알려주기 위해서죠.
configuration 이 붙여진 클래스는 보통 설정을 위한 빈클래스를 생성할때 사용하고 component는 단일 빈클래스를 생성하기 위해 사용합니다.
개발자가 비즈니스로직을 처리하는 단일 빈클래스를 생성했는데 그 클래스에 configuration을 붙여놓으면 실행은 되겠죠. 하지만 다른 개발자가 그 클래스를 보게되었을때 이건 뭐지..? 하면서 이해하기 힘들것입니다.
-5
안녕하세요, 인프런 AI 인턴입니다.
먼저 첫 번째 질문에 대한 답변을 드리겠습니다. @Configuration 어노테이션은 스프링의 Java Config 설정 클래스를 명시하는 용도로 사용됩니다. 이 어노테이션이 있는 클래스는 스프링 컨테이너에게 해당 클래스가 Bean 설정을 담당하는 클래스임을 알려줍니다. 따라서 HelloConfig 클래스에 @Configuration 어노테이션이 주석 처리되어 있다면, 해당 설정이 스프링 컨테이너에 제대로 등록되지 않을 수 있습니다.
두 번째 질문에 대한 답변을 드리겠습니다. @Configuration 어노테이션은 @Component 어노테이션과 약간의 차이점이 있습니다. @Component 어노테이션은 해당 클래스를 일반적인 Bean으로 등록하며, @Configuration 어노테이션은 설정 클래스로 사용되는 Bean으로 등록됩니다.
@Configuration 어노테이션이 있는 클래스는 스프링 컨테이너에 의해 하나 이상의 Bean이 생성되는 설정 클래스로 사용됩니다. 따라서 한 개의 클래스를 빈으로 등록할 때는 @Component 어노테이션을 사용하는게 일반적입니다. 그러나 설정 파일을 만들 때에는 @Configuration 어노테이션을 사용하여 해당 클래스가 설정 파일임을 명시적으로 표현하는 것이 좋습니다.
위 내용을 토대로 HelloConfig 클래스의 @Configuration 주석 처리 이유와 @Configuration 어노테이션을 사용하지 않는 이유에 대해 알 수 있으실 것입니다.
더 자세한 내용은 스프링 공식 문서를 참고해보시면 좋을 것 같습니다. 고맙습니다!
보안이 엄격한 데이터
0
72
1
MyProperties 자체를 클라이언트 코드에서 사용
1
43
1
http://localhost:8080/actuator/prometheus
0
85
3
jar 추가에대한 질문드려도될까요?
0
64
1
build.gradle bom link 변경
0
64
2
@Counted 초기화
0
47
1
@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..
0
99
2
springboot에서 actuator없이 micrometer를 사용할수 있나요?
0
67
1
@Configuration 질문드립니다.
0
84
2
[공유] 터미널 말고 IDE 에서 jar 실행하기
0
98
1
localhost:8080/hello-servlet 404오류
0
123
2
내장톰캣2 서블릿 톰켓 실행이 안됩니다
1
153
2
최대 Tomcat 스레드 수를 확인하는 지표
0
159
1
mac m2에서 startup.sh 실행후 아무 반응이 없습니다.
0
94
2
내장 톰캣 실행 오류 관련 질문드립니다.
0
156
1
스프링 발전 과정들도 자세히 알아둬야하나요??
1
127
1
스프링부트 ioc 컨테이너 갯수
0
89
1
404 페이지
0
133
3
actuator 호출시 타임스탬프 질문
0
90
1
순수 라이브러리 사용하기 2 - memory-v1
0
125
1
외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.
0
105
1
서블릿 컨테이너 초기화1 강의 관련 질문입니다~
0
93
1
Thread Config Max 패널 설정 변경 질문
0
127
1
스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.
0
107
1

