[Spring] 스프링 프레임워크

JiKwang Jeong·2022년 4월 21일
0

의존성 주입

현재 클래스가 의존하는 다른 클래스들을 외부에서 주입시킨다.

  • 의존성 주입 방법 3가지
    1. 생성자 주입
    2. Setter 주입
    3. 필드 주입

스프링은 의존성 주입 컨테이너로서의 기능을 한다. 스프링은 베이스 패키지와 그 하위 패키지에서 자바 빈을 찾아 스프링의 의존성 주입 컨테이너 오브젝트, 즉 ApplicationContext에 등록한다. 애플리케이션 실행 중 어떤 오브젝트가 필요한 경우 의존하는 다른 오브젝트를 찾아 연결해 준다. (@Autowired)

  • @Component
    @Component는 스프링에게 이 클래스를 자바 빈으로 등록시키라고 알려준다.
    (@Service 도 이 어노테이션을 달고 있음.)
    @Component를 클래스에 달기만 하면 무조건 스프링이 검색해서 등록을 해주는 것이 아니라 @ComponentScan 어노테이션이 어떤 클래스에 있어야만 컴포넌트 스캐닝을할 수 있다.
    @ComponentScan은 @SpringBootApplication에 포함하고 있다.

디스패처 서블릿

http 요청이 서버로 전달되면 웹 서버는 받은 요청을 해석하여 서블릿 컨테이너가 해당되는 서블릿 클래스를 실행한다.

스프링 부트는 어노테이션과 서브 클래스를 적절히 이용해 개발자들이 반복 작업과 코드를 최소화할 수 있도록 도와준다. 스프링 부트는 DispatcherServlet이라는 서블릿 서브 클래스를 이미 구현하고 있어 개발자가 서블릿 클래스를 작성하지 않아도 된다.

즉,
1. HttpServlet을 상속받을 필요 x
2. doGet을 오버라이드할 필요 x
3. HttpServletRequest를 직접 파싱할 필요 x
4. HttpServletResponse를 직접 작성할 필요 x

스프링 부트 애플리케이션 실행 과정

  1. 스프링 부트 애플리케이션 시작
  2. @ComponentScan 어노테이션이 있는 경우 베이스 패키지와 그 하위 패키지에서 @Component가 달린 클래스를 찾음
  3. 필요한 경우 @Component가 달린 클래스의 오브젝트 생성. 이때 다른 오브젝트에 의존한다면 멤버 변수로 다른 클래스를 갖고 있다면 그 멤버 변수 오브젝트를 찾아 넣어줘야한다. (@Autowired)
    a) 이때 @Autowired에 연결된 변수의 클래스가 @Component가 달린 클래스인 경우 스프링이 오브젝트를 생성해 넘겨준다.
    b) 만약 @Bean 어노테이션으로 생성하는 오브젝트인 경우 @Bean이 달린 메서드를 불러 생성해 넘겨준다.
profile
기억보다 기록, 난리보다 정리

0개의 댓글