생성자 파라미터성자 파라미터
237
5 asked
안녕하세요
수강중에 놓친 내용이 있는 것 같아서 질문 드립니다
@Configuration
public class DataConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.build();
}
@Bean
public PlatformTransactionManager transactionManager(DataSource emf) {
return new DataSourceTransactionManager(emf);
}
}componentScan 패키지 영역 내에서는
Bean Context에 등록된 Bean 객체면
Parameter로 전달받아서 사용할 수 있는건가요?
Answer 2
1
스프링은 컴포넌트스캔이든 명시적인 빈 팩토리 메소드 선언이든 상관없이 등록 가능한 모든 빈 정보를 먼저 수집하고 이 사이의 의존관계를 확인합니다. 그래서 그에 따라 각 빈의 생성 순서를 조정합니다.
위와 같은 @Bean 팩토리 메소드를 이용하는 경우 아래 transactionManager()를 실행해서 빈을 만들려면 DataSource 타입의 빈이 필요하다는 것을 알 수 있고, 위 dataSource()를 이용해서 빈을 먼저 만든 뒤에 그 오브젝트를 아래 transactionManager()의 파라미터로 넘겨줍니다.
순환참조가 발생하지 않는다면 이와 같이 다른 빈을 파라미터로 주입 받아서 새로운 빈을 생성하는 방식을, 생성자 주입 또는 @Bean 메소드 파라미터 주입 등에 활용할 수 있습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김동민님.
여러분의 질문을 이해하기 위해서는 스프링에서의 의존성 주입에 대해 조금 더 알고 가야 할 것 같습니다. 스프링 프레임워크는 의존성 관리에 있어 매우 강력한 기능을 제공하는데, 이는 특히 @Configuration과 @Bean 어노테이션이 있는 클래스에서 잘 드러납니다.
당신의 코드 분석:
@Configuration
public class DataConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.build();
}
@Bean
public PlatformTransactionManager transactionManager(DataSource emf) {
return new DataSourceTransactionManager(emf);
}
}
핵심 설명:
- Bean 등록:
@Configuration클래스 내부에서@Bean어노테이션을 사용하면 해당 메서드의 리턴 객체가 스프링 컨테이너에 빈으로 등록됩니다.
- 생성자/메서드 파라미터 주입: 메서드의 파라미터로 선언된
DataSource emf는dataSource()메서드에서 정의된DataSource빈이 자동으로 주입됩니다. 이는 스프링이 해당 타입의 빈을 컨테이너에서 찾아 파라미터로 주입하는 방식입니다. 스프링은 유사한 타입의 빈을 찾아 자동으로 주입해주기 때문에 코드에서는 필요에 따라 사용할 수 있게 되는 것입니다.
- Component Scan: 만약
@Component어노테이션이 붙은 클래스가 패키지 범위 내에 있다면 해당 클래스도 자동으로 빈으로 등록됩니다.
결론:
네, 말씀하신 대로 스프링에서는 @Bean을 이용해 생성된 객체(빈)는 스프링 컨텍스트에 등록되어 있으며, 해당 객체는 같은 컨텍스트 내에서 다른 빈의 생성자나 메서드의 매개변수로 자동으로 주입될 수 있습니다. 이 기능은 스프링의 핵심 중 하나인 의존성 주입(DI, Dependency Injection)을 통해 가능하게 됩니다.
아래 유사한 질문과 답변 링크를 참고하시어 더욱 자세한 맥락을 이해하실 수 있습니다:
- DataSource 자동 구성 클래스 설정하기
- @JdbcTest와 Bean 등록 이해하기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
수업을 잘 듣고 있습니다.
0
103
2
jackson(3.0.2 버전) ObjectMapper.readValue 에러타입
0
108
2
템플릿과 콜백의 역할 경계를 구분하는 기준
0
99
1
테스트를 작성하지않아도 되는 경우
0
86
2
오브젝트 정의 중 배열에 대해서
0
63
2
스프링 레거시를 이용하는 회사에서 일을 하게 될것같은데
0
109
2
JpaTransactionManager에 대해 궁금합니다.
0
81
2
스프링빈과 Clock 클래스 관련
0
44
2
Seprate Interface 패턴에 대한 궁금증
0
46
2
테스트의 기준을 어떤식으로 설정하는 것이 바람직한 테스트일까요 ?
0
51
2
오브젝트와 인스턴스
0
38
1
WebApiExRateProvider 템플릿 콜백 패턴을 적용하면서 테스트 코드를 만들어보았습니다.
0
62
2
템플릿 콜백 패턴 관련하여 궁금한 것이 있습니다!
0
59
2
상태 변경 API 질문
0
120
2
빈에 대한 질문
0
97
1
안녕하세요.
0
145
2
Payment 엔티티에 exRateProvider 주입
0
101
1
@Transactional private 사용유무
0
156
1
JdbcClient 생성 질문
0
190
2
안녕하세요 PaymentConfig 질문드립니다.
0
110
2
[공유] 윈도우 사용자를 위한 http 명령어 오류 해결 방법
0
244
2
토비님 ! BigDecimal 관련 링크를 못찾겠어요
2
343
2
인터페이스 사용에 관하여 질문드립니다.
0
307
3
Order에서 JPA 메타데이터 분리 - XML 사용
0
257
2

