참치코더의 꿈 메모장

spring / 컴포넌트 스캔과 의존관계 자동 주입 본문

Spring

spring / 컴포넌트 스캔과 의존관계 자동 주입

참치깡 2025. 8. 1. 16:13
728x90

@Configuration 내부의 코드 조작

- AnnotationConfigApplicationContext("입력 클래스")에 파라미터로 넘긴 값은 스프링 빈으로 등록된다. 


- ac.getBean("입력 클래스").getClass( )하면 순수한 클래스 명이 출력이 되는 것이 아니라 X.CGLIB이 붙으면서 복잡한 클래스명이 출력이 되는데, 내가 만든 입력 클래스가 아니라 스프링이 CGLIB이라는 바이트코드 조작 라이브러리를 사용해서 입력 클래스를 상속받은 다른 클래스를 만들고, 그 다른 클래스를 스프링 빈으로 등록한 것이다.

- 새로 스프링이 만든 그 클래스가 바로 싱글톤이 보장되도록 해준다.

- @Configuration을 사용하지 않고 @Bean만 사용하면 사용은 가능하지만, 싱글톤을 보장하지는 않는다.

- 의존관계 주입이 필요해서 메서드를 직접 호출할 때 싱글톤을 보장하지 않는다.


컴포넌트 스캔과 의존관계 자동 주입

- 등록해야 할 빈이 수십, 수백개가 되면 사람이 일일히 등록하기 힘들어 진다.

- 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다.

- 또 컴포넌트 스캔을 사용하는데 필요한 의존관계(DI)를 자동으로 주입하는 @Autowired라는 기능도 제공한다 

- 컴포넌트 스캔을 사용하려면 @ComponentScan을 설정 정보에 붙여주면 된다.

- 선언된 클래스 내부에는 @Bean으로 등록된 클래스가 하나도 없다.

- 컴포넌트 스캔은 @Componet 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다.

- 의존관계 설정 자체도 없기 때문에 @Component를 선언할때 의존관계 주입이 필요함 메서드에는 

@Autowired를 선언해줘야 한다.

- @Autowired를 사용하면 생성자에서 여러 의존관계도 한번에 주입받을 수 있다.
  
   ㄴ> 생성자에 @Autowired를 지정하면, 스프링 컨테이너 스프링 컨테이너 안에서 자동으로 해당 스프링 빈을 찾아서 주입한다.
         (getBean(클래스.class); 와 동일하다.)
  
   ㄴ> 생성자에 파라미터가 많아도 다 찾아서 자동으로 주입한다.


- 테스트 할때 기존에 AnnotationConfigApplicationContext를 사용하는 것은 동일하다.

 

가오리 가오리

728x90
Comments