Spring에서 의존성을 구현할때에는 크게 3가지 방법으로 나뉜다.
1. 필드 주입
@Controller
public class AutoTestingController extends CommonController {
@Autowired
private PsyItemVerIF psyItemVerIF;
}
- 필드에 있는 변수에 @Autowired를 붙여 리플렉션을 통해 의존성을 주입하는 방법이다.
Spring은 컨테이너에서 @Autowire가 붙은 서비스타입의 빈을 찾아 의존성주입을 시킨다.
짧고 간단하게 의존성주입을 할 수 있지만 final을 붙일 수 없어 불변성을 보장할 수 없고, private를 통해 직접적으로 접근할 수 있
어 객체지향의 캡슐화 원칙을 위반한다.(유지보수 및 보안성 위험)
대부분의 프로그래머들이 권장하는 방법은 아니다.
2. 생성자 주입
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
@Controller
@RequiredArgsConstructor
public class AutoTestingController extends CommonController {
private final PsyItemVerIF psyItemVerIF;
}
- 객체가 생성되는 지점에 매개변수를 통해 의존성을 주입하는 방법이다.
lombok 라이브러리를 통해 사용하면 짧은 코드로 구현이 가능하며, final를 통해 불변성의 보장이 가능하다.
대부분이 권장하는 방법이다.
3. Setter 주입
@Controller
public class MyController {
private MyService myService;
@Autowired
public void setMyService(MyService myService) {
this.myService = myService;
}
}
- 공개적인 Setter를 통해 함수를 구현하고 필드에 의존성을 주입하는 방법이다.
필드 주입과 동일하게 final를 사용하지 못해 불변성이 보장이 안되지만, 선택적 의존성과 객체 변경이 가능하다는 점에서
의의를 둘 수 있다.
필수적이지 않은 의존성을 다루거나 런타임 변경 가능성이 있는 등 특수한 경우에 사용되는걸 보통 권장한다.
'자바 스프링' 카테고리의 다른 글
| Mybatis와 JPA가 무엇인가? (0) | 2026.03.04 |
|---|---|
| Lombok 생성자 생성안됨 문제 (0) | 2025.02.12 |
| java.lang.IllegalArgumentException: The Unicode character at code point [49,548] cannot be encoded as it is outside the permitted range of 0 to 255 (0) | 2025.02.08 |
| 타임리프 @RequestParm 값 넘겨주기 문제 (0) | 2025.02.08 |
| 자바 스프링으로 크롤링 해보기 (0) | 2024.09.10 |