패캠 스프링 초격차 Part1. Spring Framework-Ch.02 필기노트
IoC (Inversion of Control), DI (Dependency Injection)
- IoC나 DI는 레고와 같은 것이다.
- 스프링이 바닥판처럼 깔려있고, 우리는 그 위에서 멋진 조립을 만든다. (애플리케이션)
- 레고 -> class끼리 알아서 연결
- 외부 장난감 -> 그냥 Java Class
Bean이란?
- 자바에서의 JavaBean
- 데이터를 저장하기 위한 구조체로 자바 빈 규약이라는 것을 따른다.
- private 프로퍼티와 getter/setter로만 데이터를 접근
public class JavaBean {
private String id; // private : 접근 제어자
private Integer count;
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public Integer getCount(){
return count;
}
public void setCount(Integer count){
this.count = count;
}
}
- Spring에서의 Bean
- 스프링 IoC 컨테이너에 의해 생성되고 관리되는 객체
- 자바처럼 new Object();로 생성하지 않음
- 각각의 Bean들끼리는 서로를 편리하게 의존, 사용할 수 있음
- IoC == bean을 관리하는 컨테이너 (Spring Application Context 기반으로 동작)
- bean을 등록하는 설정값을 정해주면 IoC 컨테이너 안에 등록이 된다. (bean이 리스트로 등록 = 우리가 만든 클래스를 그대로 쓰는게 아니라 스프링의 싱글턴 타입 , 단일객체로 만들고 SAC의 온갖 설정값을 입혀준다.)
스프링 컨테이너
-
ApplicationContext 인터페이스를 통해 제공되는 스프링 컨테이너는 Bean객체의 생성 및 조립, 상호 의존성 관리를 담당
-
Bean의 등록
- 과거에는 xml로 설정을 따로 관리하여 등록 (불편)
- 현재는 anotation 기반으로 Bean 등록
- @Bean, @Controller, @service
-
Bean 등록시 정보
- Class 경로
- Bean의 이름 : 예) testService, testDao...
- Scope : Bean을 생성하는 규칙
- singleton : 컨테이너 단일 생성
- prototype : 작업 시마다 Bean을 새롭게 생성하고 싶은 경우
- request : http 요청마다 새롭게 Bean 생성하고 싶은 경우
-
Bean LifeyCycle callback
- callback : 어떤 이벤트가 발생하는 경우 호출메소드
- lifecycle callback : Bean을 생성하고 초기화하고 파괴하는 등 특정 시점에 호출되도록 정의된 함수
- 주로 사용되는 콜백
- @PostConstruct : 빈 생성 시점에 필요한 작업 수행
- @PreDestroy : 빈 파괴 시점에 필요한 작업 수행 (애플리케이션 종료)
결론
이전에는 bean을 xml에 설정값을 써줘야 했지만 요즘에는 어노테이션으로 간편하게 쓸 수 있다.
bean을 생성할때 한번만 생성하고 쭉 쓰느냐, 작업할때마다 쓰느냐, http 요청시마다 따로따로 쓰느냐 같은 규칙을 정할 수 있다.
라이프사이클 콜백을 활용해서 bean이 생성되거나 파괴될때 필요한 작업을 수행시킬 수 있다.