반응형
실습 코드 참조
moonhy7/SpringFramework: Spring Framework 실습 코드 정리 (github.com)
7.1절 UserService 컴포넌트 구조
1. UserService 컴포넌트에 대한 클래스 다이어그램 ( _023_BoardWeb_Business_User )
2. UserService 컴포넌트 관련 파일 작성 위치
7.2절 Value Object 클래스 작성
1. 데이터베이스 User 테이블 구조
CREATE TABLE USERS(
ID VARCHAR(8) PRIMARY KEY,
PASSWORD VARCHAR(8),
NAME VARCHAR(20),
ROLE VARCHAR(5)
);
INSERT INTO USERS VALUES('test', 'test123', '관리자', 'Admin');
INSERT INTO USERS VALUES('user1', 'user1', '홍길동', 'User');
2. VO 클래스
- 변수 선언 후 Getter/Setter 메소드와 toString() 메소드 추가
package com.springbook.biz.user;
public class UserVO {
private String id;
private String password;
private String name;
private String role;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
@Override
public String toString() {
return "UserVO [id=" + id + ", password=" + password + ", name=" + name + ", role=" + role + "]";
}
}
7.3절 DAO 클래스 작성
3. DAO (Data Access Object) 클래스 작성
- JDBCUtil 클래스를 이용하여 메소드 구현
- 회원 상세 조회
- 어노테이션 설정 대신 <bean> 등록으로 객체 생성 예정
package com.springbook.biz.user.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.springbook.biz.common.JDBCUtil;
import com.springbook.biz.user.UserVO;
public class UserDAO {
//JDBC 관련 변수들
private Connection conn = null;
private PreparedStatement stmt = null;
private ResultSet rs = null;
//SQL 명령어
private final String USER_GET = "SELECT * FROM USERS WHERE ID = ? AND PASSWORD = ?";
//CRUD 기능의 메소드 구현
//회원 상세 조회
public UserVO getUser(UserVO vo) {
UserVO user = null;
try {
conn = JDBCUtil.getConnection();
stmt = conn.prepareStatement(USER_GET);
stmt.setString(1, vo.getId());
stmt.setString(2, vo.getPassword());
rs = stmt.executeQuery();
if(rs.next()) {
user = new UserVO();
user.setId(rs.getString("ID"));
user.setPassword(rs.getString("PASSWORD"));
user.setName(rs.getString("NAME"));
user.setRole(rs.getString("ROLE")); }
} catch(Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.close(stmt, conn);
}
return user;
}
}
7.4절 Service 인터페이스 작성
package com.springbook.biz.user;
public interface UserService {
//CRUD 기능의 메소드 구현
//회원 상세 조회
public UserVO getUser(UserVO vo);
}
7.5절 Service 구현 클래스 작성
- UserServiceImpl : UserService 인터페이스를 구현한 클래스
- 멤버변수로 선언된 UserDAO 객체를 이용하여 DB 연동을 처리한다
- Setter 인젝션 처리를 위해 Setter 메소드가 추가됨
package com.springbook.biz.user.impl;
import com.springbook.biz.user.UserService;
import com.springbook.biz.user.UserVO;
public class UserServiceImpl implements UserService{
private UserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public UserVO getUser(UserVO vo) {
return userDAO.getUser(vo);
}
}
7.6절 UserService 컴포넌트 테스트
1. 스프링 설정 파일 수정
- 이번에는 어노테이션을 사용하지 않고 설정 파일에 bean 객체로 객체 자동 생성하도록 할 예정
- 의존성 주입도 설정파일에 <property>에 넣어서 자동적으로 의존성 주입이 되도록 설정
<bean id="userService" class="com.springbook.biz.user.impl.UserServiceImpl">
<property name="userDAO" ref="userDAO"></property>
</bean>
<!-- 위에 ref에 들어갈 userDAO 객체 만듬 -->
<bean id="userDAO" class="com.springbook.biz.user.impl.UserDAO"></bean>
2. 클라이언트 작성 및 실행
package com.springbook.biz.user;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
public class UserServiceClient {
public static void main(String[] args) {
//1. Spring 컨테이너를 구동한다.
AbstractApplicationContext container = new GenericApplicationContext();
//2. Spring 컨테이너로부터 UserServiceImpl 객체를 LookUp한다.
UserService userService = (UserService)container.getBean("userService");
//3. 로그인 기능 테스트
UserVO vo = new UserVO();
vo.setId("test");
vo.setPassword("test123"); //test12 라고 하면 없는 비밀번호라 로그인 실패
UserVO user = userService.getUser(vo);
if(user != null) {
System.out.println(user.getName() + "님 환영합니다.");
} else {
System.out.println("로그인 실패");
}
//4. Spring 컨테이너 종료
container.close();
}
}
3. 실행 결과
7.7절 어노테이션 적용으로 변경해보기
1. 스프링 설정 파일 수정 ( _024_BoardWeb_Business_User_Annotation )
- Setter 인젝션 관련 설정 <bean> 태그 모두 지우기
- 컴포넌트 스캔의 범위를 com.springbook.biz 패키지로 지정
- UserServiceImpl 클래스와 UserDAO 클래스도 스캔 범위에 포함되므로 객체가 생성되고 의존성 주입도 처리됨
<context:component-scan base-package="com.springbook.biz"></context:component-scan>
2. 각 클래스에 어노테이션 추가해주기
1) UserServiceImpl 클래스에는 @Service 어노테이션 추가
- UserDAO 객체를 찾을 수 있도록 @Autowired 어노테이션 추가
@Service("userService")
public class UserServiceImpl implements UserService{
@Autowired
private UserDAO userDAO;
...
}
2) UserDAO 클래스에는 @Repository 어노테이션 추가
@Repository("userDAO")
public class UserDAO {
...
}
3. 실행 결과
반응형
댓글