일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- querydsl
- 플러터 개발
- 알고리즘공부
- nestjs
- 프로그래머스
- JPA 공부
- 스프링부트
- 자바공부
- K8S
- 스프링 공부
- nestjs공부
- 기술공부
- JPA스터디
- JPA예제
- 기술면접공부
- 카프카
- JPA공부
- nestjs스터디
- 자료구조공부
- 코테준비
- Flutter
- DDD
- JPA
- Kafka
- 스프링공부
- Axon framework
- 스프링부트공부
- 스프링
- 플러터 공부
- 코테공부
- Today
- Total
DevBoi
@AutoWired 사용 이유, 의존성 개념 본문
우연히 프로젝트 하다가, 스프링 버전을 높였다.
1버전에서 3버전대로....
그래서 어노테이션을 사용하다가, 문득 사용하고있는 @AutoWired 에 대해 탐구....
스프링 핵심 기술중 하나인... @AutoWired 에 대해서 포스팅...
1.필드 injection
우선 @AutoWired 는 인터페이스 관련 선언할때 재 구현한 녀석을 주입해주는 어노테이션이다.
예를 들어서 PromotionService interface를 사용하는 PromotionServiceImpl 이 있다고 치자.
@AutoWired
PromotionService promotionservice
이렇게 쓰게 되면, promotionservice 변수에는 PromotionService 인터페이스를 재정의한 impl 파일에 대한 변수를 생성해 주는 것이다.
이렇게 되면 저 promotionservice.메소드는 PromotionServiceImpl 기준으로 구현한 것들을 쓸수 있다고한다.
예를 들면, PromotionSerivceImpl 에 getTotalCount 라는 메소드를 선언했다고 치면
@AutoWired
PromotionService promotionservice
int num = promotionservice.getTotalCount();
이런식으로 쓸수있다는 것이다.
(단점 : final 로 선언 불가, 객체 변할수 있음, 순환 참조 기동시에 발견 불가
2. 생성자 injection
가장 많은.. 추천 방법 , 필드 injection 에서 해소못한 것들을 단점들을 장점으로 바꿔버림
생성자가 1개일때 @AutoWired 생략 가능, 2개이상부터는 써야함(생략도 4버전 대부터가능) + 변수 final 가능
final PromotionService promotionservice
public PromotionController(PromotionService promotionservice)
{
this.promotionservice = promotionservice;
}
요런식으로 하면, 누가 실수로라도, 저기 service 변수에 null로 하는거 불가능하다.
즉 불변하다.
오우, 글만 쓰니까 너무 지저분하다.
담엔 프로젝트 띄워서 차근차근 천천히 진행해봐야겠다. 우선 이론 개념은 여기까지...
'Develop > [Spring]' 카테고리의 다른 글
스프링 부트 vs 스프링 (0) | 2021.10.18 |
---|---|
DispatcherServlet이란? (0) | 2021.06.24 |
@RequestBody,ResponseBody,Requestparam 등등 (0) | 2021.06.13 |
@RequstMapping 기본구조 및 사용 방법 예제 (0) | 2021.06.13 |
AOP(Aspect Oriented Programming) 개념 정리 (0) | 2021.06.03 |