JdbcDao Support 와 Spring 주해 의 전환

더 읽 기
오늘 은 spring 주 해 를 하고 싶 습 니 다. 정말 out 입 니 다. 주 해 를 낸 지 이렇게 오래 되 었 는데 별로 사용 하지 않 았 습 니 다.  예전 에 놀 았 던 procject 를 가지 고 나 와 보 세 요. 첫 번 째 단 계 는 당연히 dao 층 을 배치 식 에서 주해 식 으로 바 꾸 는 것 입 니 다. 하지만 간단하게 바 꾸 면 작은 문제 에 부 딪 혔 습 니 다.
설정 식 의 dao 는 이렇게 쓰 여 있 습 니 다.

public class BaseDaoImpl extends JdbcDaoSupport

JdbcDao Support 를 계승 한 후 아래 방법 에서 호출 하 는 것 은 당연히 this. getJdbcTemplate () 입 니 다. 먼저 JdbcTempate 대상 을 가 져 온 다음 에 각종 xxx 데이터베이스 상호작용 방법 을 할 수 있 습 니 다.
프로필 에는 dataSource 가 들 어 있 습 니 다.


...
...


	


그리고 주해 로 바 뀌 기 시 작 했 습 니 다. 주 해 를 넣 고 xml 에 주석 을 넣 으 면 ok 인 줄 알 았 습 니 다.그래서 어떤 dao 의 실현 클래스 에 주 해 를 한 줄 더 했 습 니 다 @ Repository

@Repository(value="personDao")
public class PersonDaoImpl extends BaseDaoImpl implements PersonDao

tomcat 를 실행 한 후 오류 가 발생 했 습 니 다. 'dataSource' or 'jdbcTemplate' is required.  일이 그리 간단 하지 않 은 것 같 습 니 다.굳이 내 가 set, get 을 써 야 하나?그래서 나 는 BaseDaoImpl 에 다음 코드 를 넣 어 보 았 다.

public class BaseDaoImpl extends JdbcDaoSupport{
public void setDataSource(DataSource datasource){
	super.setDataSource(dataSource);
}
.
.
}

이 코드 는 틀림없이 문제 가 있 을 것 이다. 나 는 단지 쓰 려 고 시도 한 후에 중요 한 것 을 발견 했다. eclipse 는 나 에 게 Cannot override the final method from Jdbc Dao Support 라 고 힌트 를 주 었 다.좀 놀 랐 어 요. Jdbc Dao Support 류 를 봐 야 겠 어 요. 클래스 에서 다음 코드 를 발 견 했 어 요.

public final void setDataSource(DataSource dataSource) {
	if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
		this.jdbcTemplate = createJdbcTemplate(dataSource);
		initTemplateConfig();
	}
}

setDataSource 방법 은 역시 final 로 정의 되 어 있 습 니 다. 다시 쓰 지 말 라 고 했 습 니 다...........................................................그리고 갑자기 뭔 가 를 깨 달 았 습 니 다. 솔직히 예전 에 공 부 했 을 때 이 Jdbc Dao Support 물건 은 사용 하면 서 무엇 인지 상관 하지 않 았 습 니 다. 왜 이런 종류 가 필요 합 니까?getJdbcTemplate () 호출 후 데이터 베 이 스 를 조작 할 수 있 을 줄 알 았 습 니 다.JdbcDao Support 가 존재 하 는 이 유 는 설정 식 에서 dataSource 와 jdbcTemplate 두 개의 bean 을 호 환 하 는 것 입 니 다. xml 에 무엇 을 배치 하 든 실행 할 수 있 습 니 다.사실 jdbcTemplate 가 핵심 입 니 다. dataSource 는 결국 jdbcTemplate 로 바 뀌 었 기 때 문 입 니 다. 소스 코드 는 다음 과 같 습 니 다.

protected JdbcTemplate createJdbcTemplate(DataSource dataSource) {
	return new JdbcTemplate(dataSource);
}

그러나 주해 식 을 바 꾸 면 안 됩 니 다. 주해 식 을 사용 할 때 보통 @ Autowired 로 주 입 된 bean 을 설정 해 야 하기 때 문 입 니 다. 우선 Support 류 를 사용 하려 면 주해 식 에 따라 Support 류 중의 dataSource 를 @ Autowired 로 설정 해 야 합 니 다. 물론 할 수 없습니다. 사람들 은 jar 가방 에 있 습 니 다 (할 수도 있 고 할 필요 도 없습니다).그리고 하위 클래스 에 서 는 set 방법 을 다시 쓸 수 없습니다.갑자기 머리 가 웃 긴 것 을 발 견 했 습 니 다. set 를 다시 쓰 려 고 하 는데 Support 류 로 뭐 하 세 요? 이 extends 관 계 를 그냥 없 애 버 리 세 요.
그리고 제 BaseDaoImpl 에 dataSource 를 설정 하려 고 합 니 다. 다시 생각해 보 니 다. 다 고 쳤 는데 dataSource 는 왜 요? 그냥 JdbcTemplate 를 사용 하면 됩 니 다.그리고

public class BaseDaoImpl{
	@Autowired
	private JdbcTemplate jdbcTemplate;

한 바퀴 돌 았 더 니 이렇게 주 해 된 문 제 는 해결 되 었 다. 사실은 아주 간단 한 문제 이다. 나 는 크게 위 에 그렇게 많이 썼 다.
마지막 으로 한 걸음 더 남 았 습 니 다. 이전 모든 dao 의 하위 클래스 에 서 는 getJdbcTemplate () 로 JdbcTemplate 대상 을 가 져 왔 기 때문에 방법 을 추가 하 겠 습 니 다.

public class BaseDaoImpl{
	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	public JdbcTemplate getJdbcTemplate() {
		return this.jdbcTemplate;
	}

이렇게 해서 큰 성 과 를 거 두 었 습 니 다. 사실은 마지막 으로 이렇게 하 는 것 은 자신 이 간단 한 Support 류 를 실현 한 것 과 같 습 니 다. 만약 에 소스 코드 와 같은 종 류 를 꺼 내 서 자신의 유형 으로 사용 하면 @ Autowired 도 괜 찮 을 것 입 니 다. 시도 하지 않 았 습 니 다.그리고 슈퍼 port 류 에는 또 다른 방법 이 있 습 니 다. 나중에 debug 에 가서 역할 을 보 세 요.

좋은 웹페이지 즐겨찾기