작성
·
407
·
수정됨
0
//JdbcTemplateMemberRepository
public class JdbcTemplateMemberRepository implements MemberRepository {
private final JdbcTemplate jdbcTemplate;
public JdbcTemplateMemberRepository(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
//SpringConfig
@Configuration
public class SpringConfig {
private final DataSource dataSource;
public SpringConfig(DataSource dataSource) {
this.dataSource = dataSource;
}
JdbcTemplate을 사용하도록 스프링 설정 변경하는 부분인데
이전에 객체를 생성해서 직접 주입하면 안좋다고 하셨었는데
jdbc템플릿을 적용하시는 부분에서는 직접 dataSource를 JdbcTemplate를 생성해서 넣으셨습니다.
public SpringConfig(DataSource dataSource) {
this.dataSource = dataSource;
}대신에
JdbcTemplate를 빈에 등록해서
이렇게 사용하는게 이전에 배운내용에 따르면 의존성, 결합성 면에서 나은 코드라 생각했습니다.
(@autowired를 사용하게끔 수정해본 코드)
//JdbcTemplateMemberRepository
public class JdbcTemplateMemberRepository implements MemberRepository {
private final JdbcTemplate jdbcTemplate;
@Autowired
public JdbcTemplateMemberRepository(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
//SpringConfig
@Configuration
public class SpringConfig {
private final DataSource dataSource;
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
이렇게 수정해서 사용하라고 설명해주시다가 이 JdbcTemplate강의에서는 직접 주입하시면서 설명해주셨는데,
JdbcTemplate빈을 정의해서 주입하는 방식이 아닌
Datasource를 직접 사용한 이유가 있을까요?
뭔가 데이터접근할때는 다른부분이 있어서 이런 방법이 사용된건지 궁금합니다.
답변 3
2
안녕하세요. 담이님
JdbcTemplate은 인터페이스가 아니라 구현체입니다. 따라서 JdbcTemplate을 의존성 주입하더라도 구현체를 변경할 수 없습니다.
DataSource의 경우 인터페이스이고, 다양한 구현체들을 변경하며 주입할 수 있습니다.
추가로 이 부분을 이해하려면 스프링이 DB 접근 기술들을 사용할 때 어떤 관례를 주로 사용하는지를 이해해야 합니다.
관련해서 자세한 내용은 스프링 DB 접근 기술을 참고해주세요.
감사합니다.
0
뭔가 직접적인 질문에 대한 해결이 안된것 같아서 다시 질문 드립니다
이전 코드까지는 스프링 빈을 이용해서 의존성주입에 대한 문제들을 해결해 오다가
JdbcTemplete으로 바꾸는 부분에서는 이전과 달리
JdbcTemplate
빈을 정의하고 이를 필요로 하는 곳에 주입하는것이 아닌 직접 객체를 주입하는 방식으로 사용하셨는데
이 JdbcTemplate
을 사용할때 만큼은 이렇게 사용해야하는 이유가 있어서 사용하신건지, 아니면 이부분도 빈등록을 통해서 사용하는 방법이 유용한건지 헷깔렸습니다.
0
안녕하세요, 인프런 AI 인턴입니다.
담이님께서 질문하신 스프링 JdbcTemplate
의 의존성 주입 방식에 대해 궁금증을 제기하셨네요. 스프링에서 의존성 주입의 방법은 여러 가지가 있으며, 그 중 @Autowired
어노테이션을 사용하는 방법과 생성자 주입 방식을 사용하는 방법이 가장 일반적입니다.
제공된 정보 내에서, 직접적으로 동일한 질문의 문맥을 다루는 답변이 없으나, 의존성 주입 관련하여 눈여겨 볼 만한 내용이 포함된 게시물이 있어 추천드립니다. 주어진 상황에서 @Autowired
없이 직접 생성자를 통해 의존성 주입을 진행하는 방식과 관련된 기본 원리에 대한 이해를 돕고자 합니다.
강의 예제 코드에서 자동 주입 질문입니다. - 이 게시글에서는 @Autowired
어노테이션 없이도 DataSource
가 생성자를 통해 자동 주입되는 방식에 대한 설명이 포함되어 있습니다. 스프링 프레임워크는 설정 클래스 내에서 단 하나의 생성자만 존재할 경우 자동으로 의존성을 주입해주는 기능을 가지고 있습니다. 이는 @Autowired
를 명시적으로 사용하지 않아도 생성자 주입이 가능함을 의미합니다.
JDBC 강의중 Autowired 관련 의문사항 - 이 질문에서는 @Autowired
어노테이션의 필요성과 더불어, 스프링 설정 클래스를 통한 의존성 주입 방법에 대해서도 논의되었습니다. Bean으로의 명시적 등록과 그것이 어떻게 동일한 결과를 낼 수 있는지에 대한 설명을 통해, 설정 클래스와 어노테이션을 활용한 다양한 의존성 주입 방식에 대한 이해를 돕습니다.
이해하신 내용이 옳으며, 실제로 의존성 주입은 상황과 프로젝트의 구조에 따라 다양한 방식으로 접근될 수 있습니다. @Autowired
를 사용하는 방식과 생성자를 통한 직접 주입 방식 모두 각각의 장단점을 가지며, 기술적인 요구사항, 개발 팀의 선호도, 유지보수의 용이성 등 다양한 요소를 고려하여 결정됩니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
뭔가 직접적인 질문에 대한 해결이 안된것 같아서 다시 질문 드립니다
이전 코드까지는 스프링 빈을 이용해서 의존성주입에 대한 문제들을 해결해 오다가
JdbcTemplete으로 바꾸는 부분에서는 이전과 달리
JdbcTemplate
빈을 정의하고 이를 필요로 하는 곳에 주입하는것이 아닌 직접 객체를 주입하는 방식으로 사용하셨는데
이 JdbcTemplate
을 사용할때 만큼은 이렇게 사용해야하는 이유가 있어서 사용하신건지, 아니면 이부분도 빈등록을 통해서 사용하는 방법이 유용한건지 헷깔렸습니다.
안녕하세요. 담이님
답글을 남겨 주셨는데, 저에게 알림이 누락되어서 확인을 못했습니다.
오랜 시간이 흘렀지만 다음을 참고해보시면 도움이 되실거에요 🙂
https://www.inflearn.com/community/questions/1351665
감사합니다.