일반 클래스에서 DAO접근을 할수 없나요?
- 작성자 :
- 개*
- 작성일 :
- 2016-04-27 16:41:49
- 조회수 :
- 2,293
- 구분 :
- 기타
- 진행상태 :
- 완료
Q
공통유틸의 일반 자바 클래스에서 DAO에 접근을 할려고 하는데요.
다음과 같이 예외가 발생합니다.
java.lang.IllegalArgumentException: No SqlMapClient specified
접근방법은 다음처럼 new 연산자를 통해 객체생성후 접근하였습니다.
서비스를 거치지 않고는 dao에 접근이 불가능한지 궁금합니다.
OrderDAO dao = new OrderDAO();
MailVO vo = new MailVO();
try {
...
...
...
} catch (Exception e1) {
e1.printStackTrace();
}
다음과 같이 예외가 발생합니다.
java.lang.IllegalArgumentException: No SqlMapClient specified
접근방법은 다음처럼 new 연산자를 통해 객체생성후 접근하였습니다.
서비스를 거치지 않고는 dao에 접근이 불가능한지 궁금합니다.
OrderDAO dao = new OrderDAO();
MailVO vo = new MailVO();
try {
...
...
...
} catch (Exception e1) {
e1.printStackTrace();
}
A
안녕하세요. 표준프레임워크센터입니다.
결론을 먼저 말씀드리면 가능합니다.
에러 로그를 보면 DB에 접근하기 위한 sqlMapClient 정보를 찾지 못해 생긴 오류입니다.
비즈니스 로직을 어떻게 구현하셨는지는 알수도 없고, 가이드하지는 않습니다만, 아마 DAO를 new로 선언했기 때문에, 해당 DAO에서 DB 입출력에 필요한 sqlMapClient 정보가 제대로 입력되지 않아 생긴 오류로 보입니다. 위와 같은 방식으로 사용하시려면 생성자를 통해 관련 정보가 입력되도록 생성자 메서드 구현이 되어야 할 것으로 보입니다. 그러나, 표준프레임워크 혹은 스프링 프레임워크의 보편화된 개발패턴과는 거리가 멀기 때문에 권장되지는 않을 것 같습니다.
스프링 프레임워크를 정상적으로 사용하고 계시다면, DAO, Service, Controller 등의 경우 어노테이션 설정이 되어 있을 것입니다. 스프링 컨테이너에서 정상적으로 Bean을 관리하는 경우, 메소드 선언부 밖에 @Resource 어노테이션을 이용해 DAO에 접근할 수 있습니다.
감사합니다.
결론을 먼저 말씀드리면 가능합니다.
에러 로그를 보면 DB에 접근하기 위한 sqlMapClient 정보를 찾지 못해 생긴 오류입니다.
비즈니스 로직을 어떻게 구현하셨는지는 알수도 없고, 가이드하지는 않습니다만, 아마 DAO를 new로 선언했기 때문에, 해당 DAO에서 DB 입출력에 필요한 sqlMapClient 정보가 제대로 입력되지 않아 생긴 오류로 보입니다. 위와 같은 방식으로 사용하시려면 생성자를 통해 관련 정보가 입력되도록 생성자 메서드 구현이 되어야 할 것으로 보입니다. 그러나, 표준프레임워크 혹은 스프링 프레임워크의 보편화된 개발패턴과는 거리가 멀기 때문에 권장되지는 않을 것 같습니다.
스프링 프레임워크를 정상적으로 사용하고 계시다면, DAO, Service, Controller 등의 경우 어노테이션 설정이 되어 있을 것입니다. 스프링 컨테이너에서 정상적으로 Bean을 관리하는 경우, 메소드 선언부 밖에 @Resource 어노테이션을 이용해 DAO에 접근할 수 있습니다.
감사합니다.