Service 빈 객체 구현
· 사용자의 요청으로 컨트롤러의 signUpConfirm() 이 실행되면, 그 다음은 컨트롤러에서 서비스 객체를 이용한다.
· 서비스 객체를 이용한다 == 서비스 객체의 메서드를 호출한다.
· 서비스 객체를 생성하고 이용하는 방법에 대해 알아본다.
▶ 서비스 객체 생성과 이용방법
① 객체 생성 연산자(new)를 이용해서 서비스 객체를 생성하고 이용한다.
② 스프링 설정 파일을 이용해서 스프링 컨테이너에 빈(Bean) 객체로 생성하고, 의존 객체 자동 주입 방법을 이용해서 서비스 객체를 이용한다.
③ 서비스 클래스에 애너테이션을 명시해서 스프링 컨테이너에 빈 객체를 생성하고, 의존 객체 자동 주입 방법을 이용해서 서비스 객체를 이용한다. (가장 많이 사용)
MemberService 클래스 만들기
1. com.company.hello.member 패키지에 MemberService 클래스를 생성한다.
· MemberService에 다음과 같이 SignUpConfirm()을 선언한다.
package com.company.hello.member;
public class MemberService {
public int signUpConfirm(MemberVo memberVo) {
System.out.println("[MemberService] signUpConfirm()");
return 0;
}
}
new를 이용한 서비스 객체 생성 및 이용
· 자바에서 객체를 생성하고 이용하는 방법
· new연산자를 이용해서 서비스 객체를 생성하고 이용한다.
· 컨트롤러(MemberController)에 서비스(MemberService) 객체를 생성하는 코드를 추가해준다.
@Controller
public class MemberController {
MemberService memberService = new MemberService();
· MemberController의 signUpConfirm()에서 MemberService의 signUpConfirm()을 호출하는 코드를 추가해준다.
@RequestMapping("/signUpConfirm")
public String signUpConfirm(MemberVo memberVo) {
System.out.println("[MemberController] signUpConfirm()");
System.out.println("m_id: " + memberVo.getM_id());
System.out.println("m_pw: " + memberVo.getM_pw());
System.out.println("m_mail: " + memberVo.getM_mail());
System.out.println("m_phone: " + memberVo.getM_phone());
memberService.signUpConfirm(memberVo);
return null;
}
프로젝트를 실행하고 콘솔창을 확인하면 MemberService의 signUpConfirm()이 정상적으로 호출되는 것을 확인할 수 있다.
회원가입을 위해 사용자가 입력한 데이터가 MemberService.java에 정상적으로 전달되는지 확인해본다.
package com.company.hello.member;
public class MemberService {
public int signUpConfirm(MemberVo memberVo) {
System.out.println("[MemberService] signUpConfirm()");
System.out.println("m_id: " + memberVo.getM_id());
System.out.println("m_pw: " + memberVo.getM_pw());
System.out.println("m_mail: " + memberVo.getM_mail());
System.out.println("m_phone: " + memberVo.getM_phone());
return 0;
}
}
빈 객체 생성 및 의존 객체 자동 주입
▶ 작업 순서
① 스프링 설정 파일에 빈 객체를 생성한느 코드를 삽입한다.
② 실제 사용하려는 객체에는 의존 객체를 자동 주입한다.
1. 스프링 설정 파일(servlet-context.xml)에 다음 코드를 추가한다.
· 파일 위치 : ch08_pjt_01\src\main\webapp\WEB-INF\spring\appServlet\servlet-context.xml
<!-- MemberService 빈 생성 -->
<beans:bean id="memberService" class="com.company.hello.member.MemberService" />
스프링 설정 파일을 이용해서 MemberService 빈 객체를 스프링 IoC 컨테이너에 생성했으므로 MemberService를 사용하는 곳에서는 별도로 객체를 생성하지 않고도 의존 객체 자동 주입(@Autowired)을 이용해서 IoC 컨테이너에 생성된 빈 객체를 이용할 수 있다.
2. MemberController에서 의존 객체 자동 주입 방법으로 바꾸고 실행해본다.
애너테이션을 이용한 서비스 빈 객체 생성
· @Service 애너테이션을 사용하면 스프링 설정 파일에 별도로 빈 객체 생성 코드를 추가하지 않아도 된다.
· @Service 애너테이션이 빈 객체를 스프링 IoC 컨테이너에 생성한다.
· 이전에 스프링 설정 파일(servet-context.xml)에 추가한 service 빈 객체 설정 코드를 주석처리해준다.
<!-- MemberService 빈 생성 -->
<!-- <beans:bean id="memberService" class="com.company.hello.member.MemberService" /> -->
· MemberService 클래스의 org.springframework.stereotype에 있는 @Service 애너테이션을 추가해준다.
· @Service를 이용해서 스프링 IoC 컨테이너에 생성된 MemberService 빈 객체는 @Autowired에 의해서 MemberController의 멤버 필드(memberService)에 자동 주입된다.
package com.company.hello.member;
import org.springframework.stereotype.Service;
@Service
public class MemberService {
DAO 빈 객체 구현
com.company.hello.member 패키지 > MemberDao 클래스를 생성하고 다음과 같이 입력한다.
package com.company.hello.member;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Component;
@Component
public class MemberDao {
private Map<String, MemberVo> memberDB = new HashMap<String, MemberVo>();
public void insertMember(MemberVo memberVo) {
System.out.println("[MemberDao] insertMember()");
System.out.println("m_id: " + memberVo.getM_id());
System.out.println("m_pw: " + memberVo.getM_pw());
System.out.println("m_mail: " + memberVo.getM_mail());
System.out.println("m_phone: " + memberVo.getM_phone());
}
}
⚠️ 스프링 컨테이너에 빈 객체를 생성하는 애너테이션
서비스는 @Service를 사용
DAO는 @Component를 사용
→ 둘 다 상관없이 사용 가능
· DAO는 서비스에서 데이터베이스 작업이 필요한 경우 호출하면 되므로, 서비스 객체에 멤버 필드로 선언하고 @Autowired를 이용해서 의존 객체를 자동 주입하면 된다.
· 따라서 MemberService에 다음 코드를 추가한다.
package com.company.hello.member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MemberService {
@Autowired
MemberDao memberDao; // 의존 객체(MemberDao) 자동 주입
public int signUpConfirm(MemberVo memberVo) {
System.out.println("[MemberService] signUpConfirm()");
System.out.println("m_id: " + memberVo.getM_id());
System.out.println("m_pw: " + memberVo.getM_pw());
System.out.println("m_mail: " + memberVo.getM_mail());
System.out.println("m_phone: " + memberVo.getM_phone());
return 0;
}
}
· MemberService는 MemberDao에 의존한다.
· MemberDao는 데이터를 관리하는 객체로 일반덕으로 데이터를 가지고 있는 VO 객체를 이용한다.
· MemberService의 siginUpConfirm()에서 MemberDao의 insertMember()를 호출할 때 memberVo를 매개변수로 전달하고 제대로 데이터가 전달되었는지 확인해본다.
package com.company.hello.member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MemberService {
@Autowired
MemberDao memberDao; // 의존 객체(MemberDao) 자동 주입
public int signUpConfirm(MemberVo memberVo) {
System.out.println("[MemberService] signUpConfirm()");
System.out.println("m_id: " + memberVo.getM_id());
System.out.println("m_pw: " + memberVo.getM_pw());
System.out.println("m_mail: " + memberVo.getM_mail());
System.out.println("m_phone: " + memberVo.getM_phone());
memberDao.insertMember(memberVo); // memberVo를 매개변수로 전달함
return 0;
}
}
· MemberDao에서 Map에 전달받은 사용자 정보를 추가(put)해준다.
· memberDB의 key : memberVo의 m_id
· memberDB의 value : memberVo
· 회원 조회 시 m_id를 가지고 회원의 모든 정보(memberVo)를 조회할 수 있다.
· MemberDao 클래스에 모든 회원정보를 출력하는 printAllMember함수를 생성한다.
private void printAllMember() {
System.out.println("[MemberDao] printAllMember()");
Set<String> keys = memberDB.keySet();
Iterator<String> iterator = keys.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
MemberVo memberVo = memberDB.get(key);
System.out.println("m_id: " + memberVo.getM_id());
System.out.println("m_pw: " + memberVo.getM_pw());
System.out.println("m_mail: " + memberVo.getM_mail());
System.out.println("m_phone: " + memberVo.getM_phone());
}
}
insertMember 함수에서 printAllMember 함수를 추가하여 정상적으로 작동하는지 확인해본다.
'Spring & Springboot > 올인원 스프링 프레임워크' 카테고리의 다른 글
전자 도서관 프로젝트 - 설계 및 생성하기 (0) | 2023.10.05 |
---|---|
뷰와 로그인 기능 구현 (0) | 2023.09.22 |
웹 애플리케이션 생성 및 서버로 데이터 전송 (0) | 2023.09.22 |
회원 관리 페이지 만들기 (0) | 2023.09.21 |
STS를 이용한 웹 프로젝트 (0) | 2023.09.21 |