InternalService 빈 등록 질문
357
작성한 질문수 1
트랜잭션 AOP 주의 사항 - 프록시 내부 호출2
강의 질문입니다.
@TestConfiguration
static class InternalCallV1TestConfig {
@Bean
CallService callService() {
return new CallService(new InternalService());
}
/*@Bean
InternalService internalService() {
return new InternalService();
}*/
}위 코드에서 보시는 것과 같이 InternalService를 직접 빈으로 등록해주지 않고 CallService생성자 안에서 InternalService를 주입시켜주면 트랜잭션이 적용되지 않던데, 꼭 InternalService를 빈으로 직접 등록해줘야 하나요??
답변 1
4
안녕하세요!
먼저 결론부터 말씀드리자면, 빈으로 등록한 InternalService 를 사용해야만 트랜잭션이 적용이 됩니다.
그 이유는 트랜잭션 동작원리을 살펴보면 알 수 있습니다!
스프링 빈 생성
만약 해당 빈이 트랜잭션 적용대상(@Transacational 존재 유무 확인)이면
BeanPostProcessor에 해당 빈이 전달됩니다.BeanPostProcessor에서는 해당 빈을 트랜잭션이 적용된 프록시 빈으로 변환 하여 스프링 컨테이너에 변환한 빈을 저장합니다.
따라서 트랜잭션을 사용하기 위해서는, new 키워드를 통해 직접 생성한 인스턴스가 아닌 스프링 빈으로 등록된 인스턴스를 사용해야 트랜잭션이 적용됩니다.
감사합니다!
RepositoryTest의 패키지 위치가 domain인 이유
0
35
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
31
1
update()에 사용하는 setter 질문드립니다.
0
49
1
SQL 중심적 개발의 문제점에 대한 질문
0
72
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
86
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
180
1
@repository 어노테이션
0
89
3
ItemService
0
59
1
논리 커밋, 물리 커밋 질문드립니다.
0
54
1
내부 트랜잭션 커밋은 필수인가요?
0
57
1
프록시 커넥션 객체를 반환할 때 생성하는건가요?
0
55
1
Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)
2
179
2
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
0
80
1
@EventListener(ApplicationReadyEvent.class) 관련
0
88
1
트랜잭션 동기화 매니저와 데이터 소스
0
77
1
DB 관련 강의 개설 계획은 없으신건가요?
0
133
2
물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요
0
94
1
스프링 3 버전 이상 rollbackFor 변경된듯요
1
113
1
트랜잭션 전파 질문.
0
87
1
프로젝트 오픈 에러
0
126
1
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
0
84
2
같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환
0
73
1
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
0
104
1
커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문
0
98
2





