일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Kotlin
- Stateless
- DB
- Security
- 프로토타입
- 로그인
- HTTP 메서드
- BEAN
- vuex
- HTTP
- Vue.js
- dependency injection
- Singleton
- Setter
- vue-cli
- javascript
- 의존성 주입
- 라이프 사이클
- 캐시
- cache
- thymeleaf
- JPA
- Repository
- js
- di
- VUE
- 싱글톤
- Excel
- Java
- Spring
- Today
- Total
jhhan의 블로그
스프링 코어(11) - 옵션 처리 본문
이번 포스트는 의존관계 주입과 관련해서 약간 부가적으로 더 이야기 해보려 합니다.
의존관계 주입의 경우 스프링 빈에 등록이 되어 있는 경우에만 작동합니다.
하지만 사람이 코드를 만들기 때문에 간혹 스프링 빈에 등록이 되어 있지 않을 수 있습니다.
혹은 주입할 스프링 빈이 없어도 동작이 되어야 하는 경우가 있습니다.
(전자의 경우 코드를 수정하면 되겠지만, 후자의 경우는...?)
이 때 @Autowired만 되어있으면 옵션이 required = true로 되어있기 때문에
주입 대상이 없으면 오류가 발생하게 됩니다.
그러면 이런 경우에 대비를 해야합니다.
방법
- @Autowired(required = false)
- @Nullable
- Optional<>
3가지를 활용하면 됩니다.
테스트를 해보기 위해 autowired라는 패키지를 만들고
AutowiredTest라는 자바 클래스를 만듭니다.
public class AutowiredTest {
@Test
void AutowiredOption() {
ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);
}
static class TestBean {
@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);
}
}
}
이렇게 작성합니다.
- Member 클래스는 스프링 빈에 등록이 되어있지 않습니다.
- 따라서 의존 관계 자동 주입이 되지 않습니다.
이 때, required = false를 true로 바꾸면 아마도 에러가 뜰 것입니다.
required = true로 하고 테스트를 실행해봅니다.
이런 식으로 에러가 뜨는 것을 확인할 수 있습니다.
저런 타입의 빈이 없기 때문에 에러가 발생했다... 라고 문구가 보일 것입니다.
그럼 이제 원래대로 required = false로 바꿔봅니다. 그리고 다시 실행해 봅니다.
정상적으로 잘 동작하고, 문구가 뜨는 것을 알 수 있습니다.
Member 클래스는 스프링 빈에 등록이 되어있지 않기 때문에
@Autowired(required = false)라고 되어 있으면 호출 자체가 안된다는 것을 알 수 있습니다.
그리고 나머지는 null 혹은 empty라고 나타나는 것을 확인할 수 있고요.
@Nullable과 Optional은 스프링에서 지원되는 기능이기 때문에 앞으로 활용하시면 도움이 될 것입니다.
이렇게 스프링 빈의 옵션 처리에 대해서 알아봤습니다.
출처: 인프런 - 스프링 핵심원리(기본편) by 김영한
'Spring' 카테고리의 다른 글
스프링 코어(번외-1) - 애노테이션 직접 만들기 (0) | 2021.08.13 |
---|---|
스프링 코어(12) - 조회 빈이 여러 개인 경우 (0) | 2021.07.28 |
스프링 코어(10) - 의존관계 주입 (0) | 2021.07.14 |
스프링 코어(9) - 컴포넌트 스캔_2 (0) | 2021.05.13 |
스프링 코어(8) - 컴포넌트 스캔_1 (0) | 2021.05.11 |