| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 쿼리
- 코드테스트
- JavaScript
- 데이터베이스
- 스프링부트
- 알고리즘
- 서버
- 자바스크립트
- 자바
- Next.js
- node.js
- 프런트엔드
- jsp
- spring
- web
- java
- MySQL
- 프론트엔드
- 오라클
- BACK-END
- 디자인 패턴
- 스프링
- jpa
- 정리
- 백엔드
- 코드 테스트
- SQL
- oracle
- 프로그래머스
- 미니정리
- Today
- Total
참치코더의 꿈 메모장
spring / 컴포넌트 스캔과 의존관계 자동 주입 본문
@Configuration 내부의 코드 조작
- AnnotationConfigApplicationContext("입력 클래스")에 파라미터로 넘긴 값은 스프링 빈으로 등록된다.
- ac.getBean("입력 클래스").getClass( )하면 순수한 클래스 명이 출력이 되는 것이 아니라 X.CGLIB이 붙으면서 복잡한 클래스명이 출력이 되는데, 내가 만든 입력 클래스가 아니라 스프링이 CGLIB이라는 바이트코드 조작 라이브러리를 사용해서 입력 클래스를 상속받은 다른 클래스를 만들고, 그 다른 클래스를 스프링 빈으로 등록한 것이다.
- 새로 스프링이 만든 그 클래스가 바로 싱글톤이 보장되도록 해준다.
- @Configuration을 사용하지 않고 @Bean만 사용하면 사용은 가능하지만, 싱글톤을 보장하지는 않는다.
- 의존관계 주입이 필요해서 메서드를 직접 호출할 때 싱글톤을 보장하지 않는다.
컴포넌트 스캔과 의존관계 자동 주입
- 등록해야 할 빈이 수십, 수백개가 되면 사람이 일일히 등록하기 힘들어 진다.
- 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다.
- 또 컴포넌트 스캔을 사용하는데 필요한 의존관계(DI)를 자동으로 주입하는 @Autowired라는 기능도 제공한다
- 컴포넌트 스캔을 사용하려면 @ComponentScan을 설정 정보에 붙여주면 된다.
- 선언된 클래스 내부에는 @Bean으로 등록된 클래스가 하나도 없다.
- 컴포넌트 스캔은 @Componet 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다.
- 의존관계 설정 자체도 없기 때문에 @Component를 선언할때 의존관계 주입이 필요함 메서드에는
@Autowired를 선언해줘야 한다.
- @Autowired를 사용하면 생성자에서 여러 의존관계도 한번에 주입받을 수 있다.
ㄴ> 생성자에 @Autowired를 지정하면, 스프링 컨테이너 스프링 컨테이너 안에서 자동으로 해당 스프링 빈을 찾아서 주입한다.
(getBean(클래스.class); 와 동일하다.)
ㄴ> 생성자에 파라미터가 많아도 다 찾아서 자동으로 주입한다.
- 테스트 할때 기존에 AnnotationConfigApplicationContext를 사용하는 것은 동일하다.

'Spring' 카테고리의 다른 글
| Spring / DI 옵션 처리, 생성자 주입 선택해야 하는 이유 정리 (0) | 2025.08.06 |
|---|---|
| Spring / 다양한 DI(의존 관계 주입) 방법 (1) | 2025.08.05 |
| Spring / 컴포넌트 스캔 정리 및 중요한 점(스프링 프레임워크 관점) (3) | 2025.08.04 |
| 스프링 내 @Configulation 및 @Bean 사용시 주의점 (1) | 2025.07.30 |
| 스프링 / 싱글톤 패턴 및 @Configulation, @Bean 선언 이유 (0) | 2025.07.29 |