의존관계 자동 주입 방법
의존 관계 자동 주입에는 여러 가지 방법이 존재한다.
- 생성자 주입
지금까지 사용했던 방법이고 요즘은 대부분 이 방법을 사용한다. 생성자의 파라미터로 의존 관계를 주입한다. 컨테이너에 빈이 등록되면 빈의 인스턴스를 변경할 수 없고(불변), 필수로 설정해야 하는 정보가 있을 때 활용한다(필수)는 특징이 있다. 생성자가 1개만 있을 시 @Autowired를 따로 작성해주지 않아도 된다.
생성자 주입 장점 - 특징이였던 불변은 큰 장점이 된다. 순수 자바 코드로 테스트 코드를 작성할 때 누락된 내용이 있으면 컴파일 오류가 발생하여 오류를 찾기 쉽다. 또한 빈에 등록할 인스턴스를 임의로 new 해서 생성 후 생성자에 집어넣을 수 있다. 마지막으로 final 키워드를 사용할 수 있다. 의존관계가 있는 클래스를 final로 선언 후 생성자를 통해 주입하는데 이때도 잘못 작성한 경우 컴파일 오류를 발생시킬 수 있다. (컴파일 오류는 최고의 오류다.) 그러므로 그냥 생성자 주입 쓰면 된다. - 수정자 주입
setXXXX, getXXXX 함수를 작성해서 의존 관계를 주입해준다. 선택, 변경이 가능한 특징이 있는데 사용할 경우는 거의 없다. 불변이 제일 안정적이다. - 필드 주입, 일반 메서드 주입 - 이런거 있는데 안 쓰는 게 좋다. 필요한 경우 검색해서 사용하자~
옵션 처리
주입할 스프링 빈이 없어도 동작해야 할 때가 있다.
- @Autowired
@Autowired에는 required라는 옵션이 있는데 default값이 true이다. 주입 대상을 필요로 한다는 뜻이다.
@Autowired(required = false)로 작성하면 빈이 없어도 된다. 하지만 메서드 자체가 실행조차 되지 않는다. - @Nullable
빈에 등록되지 않은 매개변수에 @Nullable을 작성해 준다. - Optional <>
주입할 대상이 없으면 Optional.empty가 입력된다.
출력 값은 noBean2 = null, noBean3 = Optional.empty이다. setNoBean1은 호출되지 않는다.
( 아래 코드는 수정자 주입을 사용하였는데 테스트 결과 생성자 주입에서도 사용 가능하다.)
@Autowired(required = false)
public void setNoBean1(Member noBean1) {
System.out.println("noBean1 = " + noBean1);
}
@Autowired
public void setNoBean2(@Nullable Member noBean2) {
System.out.println("noBean2 = " + noBean2);
}
@Autowired
public void setNoBean3(Optional<Member> noBean3) {
System.out.println("noBean3 = " + noBean3);
}
LOMBOK
롬복은 자바 라이브러리이며 여러 편리 기능을 제공한다. 롬복 라이브러리를 설치한 후 파일에 @getter @setter @toString을 작성하면 우리가 자주 쓰는 메서드들을 바로 사용할 수 있다. 최고다..... @NoArgsConstructor, @RequiredArgsConstructor을 사용하여 생성자도 만들 수 있는데 @RequiredArgsConstructor을 사용하면 final로 작성되어 있는 변수들을 매개변수로 하는 생성자로 만들어 준다.
생성자가 하나이면 @Autowired를 사용할 필요가 없으니 간편하게 생성자 주입을 활용할 수 있다.
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring] 빈 스코프 (프로토타입) (0) | 2022.08.09 |
---|---|
[Spring] @Qualifier, @Primary & 빈 생명주기 콜백 (2) | 2022.08.06 |
[Spring] @ComponentScan & @Autowired (의존관계 자동 주입) (1) | 2022.07.26 |
[Spring] 싱글톤 컨테이너 (1) | 2022.07.23 |
[Spring] 스프링 컨테이너 & 스프링 빈 조회 (3) | 2022.07.20 |