transactionManager 주입 질문
424
작성한 질문수 24
안녕하세요 강사님, 강의보면 멤버리파짓토리V2와 플랫폼트랜잭션매니저
이렇게 2개를 주입받고있는데 2개이상일때 생성자를 정의 안해도 되는건가요? 스프링 1편에서는 RequiredArgsConstructor 같은경우에 필드가 한개일때만 자동생성 된다고 배우고 두개 이상일때는 생성자를만들어야하는거로 기억하고있어서요 ㅠㅠ
답변 1
0
안녕하세요. 김보겸님, 공식 서포터즈 y2gcoder입니다.
MemberServiceV2와 같은 코드를 보고 말씀하시는 것으로 이해했습니다.
먼저 Lombok의 @RequiredArgsConstructor는 final 키워드나 @NotNul이 붙은 필드의 생성자를 자동으로 만들어주는 애노테이션입니다.
그리고 말씀해주신 스프링 1편의
RequiredArgsConstructor 같은경우에 필드가 한개일때만 자동생성 된다고 배우고 두개 이상일때는 생성자를만들어야하는거로 기억하고있어서요 ㅠㅠ
이 부분은 아마 생성자를 통한 의존성 주입의 내용으로 보입니다. 생성자를 통한 의존성 주입때는 기본적으로 생성자 위에 @Autowired를 붙여 의존성 주입을 해주고 있습니다. 그런데 생성자가 1개일 때는 스프링에서 @Autowired를 자동으로 붙여줍니다. 생성자가 2개 이상이라면 스프링에서 어느 생성자에 @Autowired를 붙여줘야 할지 모르기 때문에 명시적으로 의존성 주입에 이용할 생성자에 @Autowired를 붙여줘야 합니다. 아마 이 부분과 혼동하신 것이 아닐까 생각합니다. @RequiredArgsConstructor는 본질적으로 생성자를 편하게 생성해주는 롬복 애노테이션으로서, 의존성 주입과는 직접적인 관련이 없습니다!
감사합니다.
0
아 영상 속에서는 private final PlatformTranscationManager transactionManager;
private final MemberRepositoryV2 memberRepository;
이렇게 2개의 필드가 있던데 위 2개의 필드는 의존성 주입이 아니라 그냥 필드만 만들고 사용하는 의미인건가요?
1
final 키워드가 있는 변수는 반드시 초기화해줘야 합니다.
그래서 서비스 클래스의 위에 보시면 @RequiredArgsConstructor 롬복 애노테이션이 존재합니다 :)
그리고 해당 롬복 애노테이션은
private final PlatformTranscationManager transactionManager;
private final MemberRepositoryV2 memberRepository;
public MemberServiceV2(PlatformTranscationManager transactionManager,
MemberRepositoryV2 memberRepository) {
this.transactionManager = transactionManager;
this.memberRepository = memberRepository;
}라는 생성자를 만들어주는 것과 동일합니다.
그리고 스프링은 이렇게 빈으로 등록된 클래스의 생성자가 하나있을 때
자동으로 해당 생성자 위에 @Autowired를 붙여줘서 생성자를 통한 의존성 주입을 가능하게 해주는 것입니다 :)
private final PlatformTranscationManager transactionManager;
private final MemberRepositoryV2 memberRepository;
@Autowired
public MemberServiceV2(PlatformTranscationManager transactionManager,
MemberRepositoryV2 memberRepository) {
this.transactionManager = transactionManager;
this.memberRepository = memberRepository;
}해당 내용이 이해가 가지 않으신다면 스프링 핵심 원리 기본편을 다시 천천히 복습해보시는 것을 추천합니다:)
0
우선 항상 감사드립니다 ㅠㅠ 롬복 어노테이션 사용하면 자동생성자 만들어지고 만약 생성자가 2개 이상이면 @Autowired를 수동으로 붙여줘야하는걸로 알았는데 수동으로 안붙여도 되는군요 .. 감사합니다!
1
엇!
생성자가 바로 저
public MemberServiceV2(PlatformTranscationManager transactionManager,
MemberRepositoryV2 memberRepository) {
this.transactionManager = transactionManager;
this.memberRepository = memberRepository;
}이런 메서드 하나가 생성자 하나라고 보시면 됩니다.
그래서 위는 생성자가 하나인 것이고 하나기 때문에 스프링에서 자동으로 @Autowired를 붙여줄 수 있는 것입니다.
생성자가 2개라는 말은
public MemberServiceV2() {}
public MemberServiceV2(PlatformTranscationManager transactionManager,
MemberRepositoryV2 memberRepository) {
this.transactionManager = transactionManager;
this.memberRepository = memberRepository;
}이와 같이 해당 생성자 메서드가 2개임을 말합니다!
spring initialiser 어떤걸 선택해야될지 모르겠어요
0
38
2
트랜잭션 템플릿이 체크예외는 커밋하는 이유가 궁금합니다.
0
51
1
jdbc 학습하다 궁금해서 질문드려요
0
85
1
정상이체와 이체중 예외발생 차이
0
70
2
이번 강의부터가 JDBC 직접 사용 맞나요?
0
89
1
순수한 서비스 계층에 대한 의문???
0
83
2
3_4test, 4test 자동 리소스 안됨
0
60
2
데이터베이스 선택 관련 질문.
0
71
2
after 메서드 사용 유무
0
60
2
데이터베이스 접근 및 DB 락
0
57
1
@SpingBootTest, @TestConfiguration
0
58
1
Read Committed 격리 수준 사용 관련 질문
0
52
1
AopCheck Test 부분의 EnhancerBySpring 확인 법??
0
69
2
커리큘럼 관련 질문
0
78
1
서비서 계층 스프링 프레임워크 사용
0
89
1
validation(toMember)의 위치
0
84
2
데이터 계층에서 서비스 로직의 datasource를 인식하는 방법
0
166
2
member 상수 질문
0
124
2
ctrl + F6 이후로 con 인식이 안 됩니다
0
154
2
DrivenManager 와 Connection 반환에 대한 질문입니다!
0
110
1
섹션5 트랜잭션 템플릿관련 질문(이기종 DB)
0
116
1
세션1 테이블 조회결과 그림은 Redo 로그에 속하나요?
0
103
1
트랜잭션이 필요하지 않은 경우 DB 대신 파일 시스템을 사용하는 것이 더 효율적인가?
0
98
1
강의 14분쯤 Exception 질문
0
116
2





