본문 바로가기
Spring/study

스프링 프레임워크 입문 - IoC ( Inversion of Control )

by avvin 2019. 5. 30.

스프링 프레임워크 입문.pdf



https://www.inflearn.com/course/spring#


https://github.com/spring-projects/spring-petclinic 


예제 프로젝트 파일 받기




IoC(Inversion of Control) 소개


주로 의존성 컨트롤이 뒤바뀜

ex

OwnerController는 반드시 OwnerRepository가 필요



IoC 컨테이너


스프링은 의존성 주입을 위한 IoC 컨테이너를 제공


컨테이너의 가장 핵심적인 인터페이스가 ApplicationContext


스프링에는 ApplicationContext라는 인터페이스 존재


이 인터페이스가 IoC 컨테이너로 불림


직접 쓸 일은 없고 의존성이 주입될 객체를 startup과 함께 먼저 객체를 만들어준다.


컨테이너 내부에 만든 객체(bean)들의 의존성을 관리해준다.



컴포넌트 스캔 :

@Controller @Repository @Service @Component 이러한 어노테이션이 붙어있으면 자동으로 빈으로 등록됨


IoC 컨테이너에서 해당 클래스들의 객체들을 만들고 관리해줌


IoC 컨테이너 객체를 굳이 직접 보고싶으면 

ApplicationContext (스스로를 빈으로 등록해놨다) 를 빈에 주입해서 쓰면 된다.// 자세한건 뒤에서 다룰 내용


*RestController + ResponseBody =>  알맞은 형식으로 리턴



빈(Bean)


스프링 IoC 컨테이너(ApplicationContext)가 관리하는 객체

오로지 bean만 의존성을 관리해줌


빈 등록 방법


1. 컴포넌트 스캔 

 : 위에서 언급한 @Controller @Repository @Service @Component가 붙은 클래스들을 스캔하여 빈으로 등록 

  스프링 부트로 만든 애플리케이션은 @SpringBootApplication를 가진 클래스가 있다.(스프링 부트의 경우!)

  이 어노테이션을 따라가면 @ComponentScan을 찾을 수 있는데, 

  이 어노테이션을 처리하는 핸들러가 @Component가 붙은 클래스를 모두 빈으로 등록해준다.

  (어노테이션 자체에는 기능이 없다. 어노테이션을 마커로 사용하는 처리 프로세서가 존재)


  @SpringBootApplication가 존재하는 패키지 내에서만 @ComponentScan이 기능한다.


@Controller @Repository @Service 도 모두 코드를 따라가보면 내부에 @Component를 포함하고 있다.


(Repository<>인터페이스를 상속(? extend라 써있다)받아도 빈으로 자동 등록된다.)


2. 직접 일일히 SML이나 자바 설정 파일에 등록


@Configuration을 포함한 어노테이션을 가진 클래스에


@bean을 달아놓은 메서드???를 정의한다.


@Autowired 어노테이션으로 ApplicationContext(IoC)에 있는 bean을 꺼내 쓸 수 있다.


@Autowired

타입 메서드명; 

으로 빈을 꺼내온 뒤


메서드명으로 호출



의존성 주입


@Autowired / @Inject 



bean이 되는 클래스에 생성자가 하나만 있고 

그 생성자의 매개변수 타입이 빈으로 등록돼있다면 

생성자에 @Autowired를 생략해도 된다. (스프링 4인가 5부터) <<이런식으로 @Autowired / @Inject 점점 사라질 수 있다


필드나 setter에 붙이는 경우도 있다.