"개발자가 아닌 스프링이 직접 new를 해준다"
spring이 수 많은 object들을 class로 만들어 놨는데 spring이 읽어서 이 객체들을 직접 띄운다. 즉, spring이 알아서 이것들을 메모리에 올려준다.
컨테이너는 보통 객체의 Life Cycle을 관리하고 제어하는 것을 말한다. 제어권이 spring framework으로 넘어오면서 DI(의존성 주입), AOP (관점 지향 프로그래밍)을 가능하게 한다.
"컴포넌트 스캔"
어떤 패키지가 있을 때 해당 패키지 이하를 전부 다 스캔해서 필요한 것들을 메모리에 로드 (IoC)
"스프링이 스캔하는 패키지"
: src > main > java 아래 com/example/goormblog 아래 파일들만 스캔.
따라서, 이 하위에 파일을 생성해야 한다. (다른 폴더 하위 파일은 scan X)
스프링이 해당 패키지 이하를 스캔해서 모든 파일을 메모리에 new하는 것은 아니고, 특정 annotation이 붙은 class 파일은 new해서 (IoC) 스프링 컨테이너에서 관리
@RestController
public class BlogControllerTest {
// http://localhost:8080/test/hello
@GetMapping("/test/hello")
public String hello() {
return "<h1> hello spring boot</h1>";
}
}
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/서버_이름?serverTimezone=Asia/Seoul&useUnicode=true&characterEncoding=UTF-8
username: 사용자_이름
password: 사용자_비번
driver-class-name: com.mysql.cj.jdbc.Driver
application:
name: 앱_이름
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.projectlombok:lombok:1.18.22'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
runtimeOnly 'mysql:mysql-connector-java'
}