■ @Controller
- Controller 타입의 어노테이션을 붙여주면 빈 스캐너가 자동으로 빈으로 등록해 준다.
(servlet-context.xml안에 있는 <context:compenent-scan>태그)
@Controller
public class MemberController {
}
■ 기존 객체 생성 방식
- new 연산자를 사용해서 아래와 같이 만들었다.
- 단점은 서비스가 동시에 많은 횟수가 요청이 되면 그만큼 많은 객체가 생성된다.
private MemberService mService = new MemberService();
■ Spring 객체 생성 방식
- Spring의 DI(Dependency Injection) : 객체를 스프링에서 직접 생성해서 주입해 주는 개념
- new 연산자를 쓰지 않고 선언만 한 후 @Autowired어노테이션을 붙여주면 객체를 주입받을 수 있다.
@Autowired
private MemberService mService;
● 필드 주입 방식의 장단점
- 장점
- 이해하기 편하다.
- 사용하기 편하다
- 단점
- 순환 의존성 문제가 발생할 수 있다.
- 무분별한 주입 시 의존관계 확인이 어렵다.
- final 예약어를 지정할 수가 없다.
● 생성자 주입 방식
public MemberController() {
}
@Autowired
public MemberController(MemberService mService) {
this.mService = mService;
}
● 의존성 주입 시 권장하는 방식
- 생성자를 참조할 클래스를 인자로 받아서 필드에 mapping시킨다.
- 장점
- 현재 클래스에서 내가 주입시킬 객체들을 모아서 관리할 수 있기 때문에 한눈에 알아보기 편하다.
- 코드 분석과 테스트에 유용하며 final로 필드값을 받을 수 있어서 안전하다.
● Setter 주입방식
- setter메서드로 bean을 주입받는 방식
- 생성자의 너무 많은 의존성을 주입받게 되면 알아보기 힘들다는 단점이 있어서 보완하기 위해 사용하거나 혹은 의존성이 항상 필요한 경우가 아니라 선택사항이라면 사용한다.
'Spring' 카테고리의 다른 글
Spring (6) 비동기 요청하기 (0) | 2023.08.03 |
---|---|
Spring(5) 예외처리 방법(중복사용 가능) (0) | 2023.08.03 |
Spring (4) 요청 처리 후 "응답 데이터"를 담고 응답페이지로 url 재요청하기 (0) | 2023.08.03 |
Spring (3) parameter 받기 (0) | 2023.08.01 |
Spring (1) lombok (0) | 2023.08.01 |