@RestController가 붙은 애들을 new를 해서 자료형에 담음
제어의 역전(Inversion of Controll)
- IoC는 객체의 생성과 생명주기 관리를 개발자가 직접 제어하는 것이 아닌, 이를 IoC 컨테이너 또는 프레임워크에 위임하는 디자인 원칙
- 객체 간의 의존성을 줄이고, 코드의 모듈화 및 재사용성 향상
- 모의 객체 주입 단위 테스트를 쉽게 작성 가능
- 모듈화가 잘 되어 유지보수 용이.
이걸 IOC(inversion of control) >> 제어의 역전
즉, 개발자가 하는 NEW를 스프링이 제어권을 들고 있다 이것을 제어의 역전이라고 한다
NEW의 주도권을 스프링이 가지는 것
개발자는 어노테이션(@)만 붙여라
컴포넌트 스캔은 .COM패키지 이하의 모든 클래스를 스캔한다
예시 코드
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Random;
@RestController //component 스캔 new되어서 자료에 뜨는데 IOC
public class HelloController {
public HelloController(){
System.out.println("HelloController 컴포넌트 스캔됨");
}
@GetMapping("/home")
public void home(){
System.out.println("home 호출됨");
//스프링에서 찾을 수 있다 RestController가 떠있어서
//데모 패키지 이하에 것들만 뜬다
//얘네가 어딜 스캔하는 지 알아야한다
//메서드가 중요하지는 않다 어차피 어노테이션 걸어놓으면 그 이하의 패키지들은 전부 스캔하기 때문
}
@GetMapping("/hello")
public String hello(){
String name = "홍길동";
return "<h1>hello "+name+"</h1>";
}
@GetMapping("/random")
public String random(){
Random r = new Random();
int num = r.nextInt(5)+1;
return "<h1>random "+num+"</h1>"; //요청할 때마다 페이지가 변한다(동적 페이지)
}
}
컴포넌트 스캔
스프링프레임워크같은 현대적 프레임워크나 라이브러리에서 지원하고 있고,
주로 어노테이션(@)을 사용하여 스캔 대상을 지정하거나 필터링을 한다
@RestController와 같은 어노테이션은 해당 클래스를 컨트롤러로 인식하게 되어 자동으로 해당 컨트롤러를 등록
컴포넌트 스캔은 @RestController 어노테이션이 붙은 클래스를 스캔하여 등록한다
Share article