DI 주입 방법

2024. 5. 14. 10:41스프링

반응형

DI 주입 방법

1) 필드 주입

@Autowired private MemberService memberService;

Java의 Reflection API를 사용하여 접근 제한자를 무시하고 필드에 직접 접근할 수 있다. Spring Framework는
이러한 Reflection API를 사용해 private으로 선언된 필드에도 의존성을 주입할 수 있다. final로 되어 있어도
Reflection API로 변경이 가능하기 때문에 변경이 가능하다.
따라서 객체가 생성된 후에도 의존성이 변경될 수 있다. 이것은 객체의 불변성을 해칠 수 있다.
또한 테스트를 위해서 스프링 컨테이너가 필요하여 테스트하기 어렵다.


2) setter 주입

private MemberService memberService;

@Autowired
public setMemberService(MemberService memberService) {
this.memberService = memberService;
}

public으로 되어 있어 여러곳에서 다른 객체로 바뀔 수 있다. 보통 처음에 한번 주입하면 바뀔일이 없는데
다른곳에서 바뀔 위험이 있어서 권장하지 않는다.

3) 생성자 주입(가장 권장하는 방식)

private final MemberService memberService;

@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}

객체가 생성될 때 의존성을 한번에 주입받기 때문에 의존성 주입 이후에 변경이 불가능해서 불변성이 확보됨.
생성자가 하나만 있으면 @Autowired 생략가능

반응형

'스프링' 카테고리의 다른 글

스프링 jdbc 템플릿  (0) 2024.05.16
스프링부트 테스트  (0) 2024.05.14
@Configuration 스프링빈 등록  (0) 2024.05.14
@Configuration 스프링빈 등록  (0) 2024.05.14
컴포넌트 스캔으로 의존관계 설정  (0) 2024.05.13