IT 시사 및 CS 지식/IT 시사 및 CS 지식

[CS스터디]220602 Spring - 2

GAEBAL 2022. 6. 3. 01:33
728x90

DI의 종류는 어떤 것이 있고, 이들의 차이는 무엇인가요?

DI의 종류에는 Constructor Injection(생성자 주입)과 Field Injection(필드 주입), Setter Injection(수정자 주입)이 있음

1. 생성자 주입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Component
public class ABean {
    
    private BBean b;
    
    public ABean(BBean b) {
        this.b=b;
    }
    
    public void bMethod() {
        b.print();
    }
    
}
cs

 

생성자를 위한 빈 주입은 위와 같이 생성자의 매개변수로 의존 주입할 빈을 매개변수로 넣어준다. 스프링 4.3 버전 이후로는 생성자 의존주입에 @Autowired를 넣을 필요는 없다.

 

2. 필드 주입

1
2
3
4
5
6
7
8
9
10
11
@Component
public class ABean {
    
    @Autowired
    private BBean b;
    
    public void bMethod() {
        b.print();
    }
    
}
cs

 

보통 위와 같이 필드에 의존주입할 빈을 선언하고 @Autowired를 붙여 빈 주입을 한다.

 

3. 수정자 주입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Component
public class ABean {
    
    private BBean b;
    
    @Autowired
    public void setB(BBean b) {
        this.b = b;
    }
 
    public void bMethod() {
        b.print();
    }
    
}
cs

 

세터를 이용한 빈주입이다. 의존 주입할 빈 객체에 대한 Setter를 만들어주고 @Autowired를 붙여준다.

 

 

 

Autowiring 과정은?

컨테이너에서 타입(인터페이스 또는 오브젝트)을 이용해 의존 대상 객체를 검색하고,

할당할 수 있는 빈 객체를 찾아 주입한다.

 

 

 

Spring Web MVC의 Dispatcher Servlet의 동작 원리에 대해서 간단히 설명해주세요.

1. 클라이언트에서 DispatcherServlet으로 요청이 들어옴

2. DispatcherServlet가 HandlerMapping에게 컨트롤러 요청 -> 처리 컨트롤러 리턴

3. DispatcherServlet가 Controller에게 처리 요청 -> ModelAndView 리턴

4. DispatcherServlet가 ViewResolver에세 View 객체 리턴 -> View 리턴

5. DispatcherServlet가 View에게 응답 생성 요청

6. JSP 생성(JSP든 뭐든 뷰 생성)

 

 

프론트 컨트롤러 패턴이란 무엇인가요?

  • DispatcherServlet이라는 프론트 컨트롤러를 이용하여 웹MVC 패턴을 이용하는 것
  • Front Controller Pattern.
    • act는 나 뭐뭐좀 해줘~ + 데이터 였음!(예를 들면 로그인을 하기 위해서는 아이디와 비번을 갖고 오겠지?)
    • 원래는 act가 뭔지 if문 엄청 돌리고 데이터를 처리하기 위해서 그 안에 메서드를 만들었음
    • 잘 생각해보면 act 와 data를 분리 시킬 수 있겠지??
    • act는 doXXX() 메서드 안에 있어야됨. 근데 data 관련은 그 안에 없어도 됨
    • 누가하든 코드가 똑같은거? → if(act가 뭐냐) 이 코드, 그리고 act가 뭐인지에 따라 무슨 메서드를 호출할지(forward, redirect) 이건 똑같음! → 얘네는 자동화 가능!
    • 자동으로 되는 애들은 프레임워크로 가능(컨트롤러 전에 제어가 가능? → Front Controller)
    • 진짜 내가 해야될 일 → 데이터 처리에만 집중 가능!

 

 

 

728x90