티스토리 뷰
코드 변경 전
@Autowired를 사용해 LessonService 객체를 주입하여 사용할 수 있는 코드이다.
하지만 우리가 출력하고자하는 평균별점 값은 LessonReviewService에 존재하므로 평균별점을 계산하는 calculateAvgScore메서드를 호출할 수 없다.
@Autowired
private LessonService ls;
@GetMapping("/lesson")
public String requestLessonById(@RequestParam("id") String classId, Model model)
{
Lesson lsById = ls.readClassById(classId);
model.addAttribute("ls", lsById);
return "/Lesson/lesson";
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-8">
<h3>${ls.className}</h3>
<p>가격 : ${ls.fees}원</p>
<br>
<p><b>상품코드</b> : <span class="badge badge-info">${ls.classId}</span>
<p><b>상품 설명</b> : ${ls.description}
<p><b>분류</b> : ${ls.subject}
<p><b>재고수</b> : ${ls.venue}
<p><b>상태</b> : ${ls.managerName}
<p><b>누적 주문수</b> : ${ls.tel}
<h4>평균 별점 : ${ls.auditors}점</h4>
<br>
<form:form name="addLesson" method="put">
<p><a href="javascript:addToCart('../cart/add/${ls.classId}')" class="btn btn-primary">관심 등록 »</a>
<a href="<c:url value="/products"/>"class="btn btn-secondary">도서 목록 »</a>
<a href="<c:url value="/cart"/>"class="btn btn-warning">수강 신청 »</a>
<a href='<c:url value="/lesson/review?id=${ls.classId}"/>' class="btn btn-success">리뷰 목록»</a>
<a href='<c:url value="/lesson/update?id=${ls.classId}"/>' class="btn btn-success">수정»</a>
<a href="<c:url value="javascript:deleteConfirm('${ls.classId}')"/>" class="btn btn-danger">삭제 »</a>
</form:form>
</div>
</div>
</div>
</body>
</html>
그 결과 아래와 같이 평균 별점 값이 출력되지 않는다.
코드 변경 후
@Autowired를 사용하여 LessonReviewService 객체를 찾아 자동으로 주입되도록 작성해 추가적으로 설정해주었다.
이렇게 작성할면 개발자가 직접 객체를 생성하고 의존성을 주입할 필요 없이 Spring이 알아서 의존성을 관리해준다.
그러므로 코드의 유지보수성이 향상되고 의존성 주입 패턴을 따르게된다.
또한, 클래스를 빈으로 등록하고 의존성을 찾아 주입하는 등 작업을 자동으로 수행한다.
@Autowired
private LessonService ls;
@Autowired
private LessonReviewService lessonReviewService;
@GetMapping("/lesson")
public String requestLessonById(@RequestParam("id") String classId, Model model)
{
Lesson lsById = ls.readClassById(classId);
double avgScore = lessonReviewService.calculateAvgScore(classId);
model.addAttribute("ls", lsById); // product.jsp 에서 pd. 해서 꺼내쓰면됨
model.addAttribute("avgScore",avgScore);
System.out.println("avgScore : "+avgScore);
return "/Lesson/lesson";
}
위와 같이 설정해주어 LessonController에서 의존성 범위가 확장되었다.
확장되었으므로 lessonReviewService의 calculateAvgScore 메서드를 사용할 수 있게되어 가지고 오고자했던 값이 평균 별점 값을 아래와같이 출력할 수 있었다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-8">
<h3>${ls.className}</h3>
<p>가격 : ${ls.fees}원</p>
<br>
<p><b>상품코드</b> : <span class="badge badge-info">${ls.classId}</span>
<p><b>상품 설명</b> : ${ls.description}
<p><b>분류</b> : ${ls.subject}
<p><b>재고수</b> : ${ls.venue}
<p><b>상태</b> : ${ls.managerName}
<p><b>누적 주문수</b> : ${ls.tel}
<h4>평균 별점 : ${avgScore}점</h4>
<br>
<form:form name="addLesson" method="put">
<p><a href="javascript:addToCart('../cart/add/${ls.classId}')" class="btn btn-primary">관심 등록 »</a>
<a href="<c:url value="/products"/>"class="btn btn-secondary">도서 목록 »</a>
<a href="<c:url value="/cart"/>"class="btn btn-warning">수강 신청 »</a>
<a href='<c:url value="/lesson/review?id=${ls.classId}"/>' class="btn btn-success">리뷰 목록»</a>
<a href='<c:url value="/lesson/update?id=${ls.classId}"/>' class="btn btn-success">수정»</a>
<a href="<c:url value="javascript:deleteConfirm('${ls.classId}')"/>" class="btn btn-danger">삭제 »</a>
</form:form>
</div>
</div>
</div>
</body>
</html>
'코딩 > spring' 카테고리의 다른 글
[20주 5일차] 경기 추가 (0) | 2024.02.23 |
---|---|
[20주 5일차] 경기 매칭하기 (0) | 2024.02.23 |
queryForObject() 메서드와 query() 메서드 (RowMapper) (0) | 2024.02.20 |
[20주 2일차] 프로젝트 - 강의 리뷰 관리 (0) | 2024.02.20 |
[20주 1일차] 프로젝트 - 경기관리 (1) | 2024.02.19 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday