작성
·
27
·
수정됨
0
안녕하세요. 강사님
트랜잭션 문제해결 - 트랜잭션AOP적용
강의에서 하신 말씀에 질문이 있습니다.
07:20 이후에 나옵니다.
"물론 우리가 직접 의존관계를 주입해서 써도 되고요" 라는 말씀이 궁금합니다.
기본편에서 열심히 공부했던 개념이 나오는데요.
스프링빈 구성방식
직접호출(@Configuration, @Bean)
자동호출(@ComponentScan, @Component)
강의에서
DataSource와 TxManager를 빈등록하는 방법으로 위 1번방식으로 진행했습니다.
Proxy는 DataSource와 TxManager빈을 2번방식으로 주입받아서 진행된다고 설명하셨습니다.
@Component
public class TransactionProxy {
private MemberService target;
public void logic() {
//트랜잭션 시작
TransactionStatus status = transactionManager.getTransaction(..);
try {
//실제 대상 호출
target.logic();
transactionManager.commit(status); //성공시 커밋
} catch (Exception e) {
transactionManager.rollback(status); //실패시 롤백
throw new IllegalStateException(e);
}
}
}
이후에 아래코드와 같이 1번 방식으로 직접 등록을 하려고 할 때, 의존관계를 직접주입해도 좋다라 말씀주신것 같습니다. (강의중 말씀: "물론 우리가 직접 의존관계를 주입해서 써도 되고요")
public class TransactionProxy {
private MemberService target;
public void logic() {
//트랜잭션 시작
TransactionStatus status = transactionManager.getTransaction(..);
try {
//실제 대상 호출
target.logic();
transactionManager.commit(status); //성공시 커밋
} catch (Exception e) {
transactionManager.rollback(status); //실패시 롤백
throw new IllegalStateException(e);
}
}
}
@TestConfiguration
static class TestConfig {
@Bean
DataSource dataSource() {
return new DriverManagerDataSource(URL, USERNAME, PASSWORD);
}
@Bean
PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
TransactionProxy txProxy() {
return new TransactionProxy(transactionManager());
}
}
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. 창신동 장첸님.
질문해 주신 부분과 관련하여, 스프링에서의 의존관계 주입 방식에 대해 설명드리겠습니다. 스프링에서는 의존성을 주입하는 여러 방법이 있으며, 이는 개발자가 자유롭게 선택할 수 있는 부분이기 때문에 다양한 상황에 맞춰 유연하게 사용할 수 있습니다.
직접호출 방식 (@Configuration, @Bean): 이 방식은 개발자가 직접 자바 코드를 통해 스프링 빈을 등록하고 의존성을 주입하는 방법입니다. 설정 파일을 통해 명시적으로 빈을 관리할 수 있기 때문에, 복잡한 설정 또는 스프링 빈의 동작을 상세히 제어해야 할 경우 유용합니다.
자동호출 방식 (@ComponentScan, @Component): 이 방식은 스프링의 자동 스캔 기능을 통해 컴포넌트를 빈으로 등록하는 방법입니다. 주로 애노테이션 기반 구성(@Autowired, @Service, @Repository 등)을 통해 의존성을 자동으로 처리합니다. 코드가 간결해지고, 스프링의 자동화된 관리 기능을 최대한 활용할 수 있습니다.
강의에서는 첫 번째 방식인 직접 호출을 통해 트랜잭션 AOP를 적용하고 있지만, 두 번째 방식인 자동 호출 방식으로도 구현이 가능합니다. 스프링의 유연함 덕분에 어느 한 방법에 고정되지 않고, 상황에 맞는 방법을 선택할 수 있습니다. 다시 말해, 특정한 기능이 두 방식 모두에서 구현 가능할 경우, 취향이나 프로젝트의 성격에 따라 선택할 수 있습니다.
관련해서는 아래의 유사한 질문 링크를 참고해 보시길 추천드립니다:
이 질문과 답변은 의존관계 주입 방법에 대한 심층적인 이해를 도와줄 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.