반응형
섹션 5 와 섹션 6 ...........
[ 컴포넌트 스캔과 자동 의존관계 설정 ]
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Autowired : 객체 생성 시점에 스프링 연관된 객체를 스프링 컨테이너에서 찾아 주입
객체 의존 관계를 외부에서 넣어주는 것 → DI(Dependency Injection), 의존성 주입
@Controller 있으면 자동 등록
@Controller , @Service , @Repository를 각 클래스 선언 위에 추가해주기 → 컴포넌트 스캔
스프링 빈으로 자동 등록 되는 @Component 를 포함하는 애노테이션
- @Controller
- @Service
- @Repository
@Autowired : 위 그림에서의 연결 의미
[ 자바 코드로 직접 스프링 빈 등록하기 ]
package hello.hellospring;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
// memberService를 스프링 빈으로 등록
@Bean
public MemberService memberService() {
return new MemberService(memberRepository()); // 스프링 빈에 등록되어 있는 MemberRepository를 MemberService에 넣어줌
}
// memberRepository를 스프링 빈으로 등록
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
정형화된 컨트롤러, 서비스, 리포지토리 같은 코드 : 컴포넌트 스캔
정형화 X , 상황에 따라 구현 클래스 변경 : 설정을 통해 스프링 빈으로 등록
@Autowired를 통한 DI : 스프링이 관리하는 객체에서만 동작
[회원 웹 기능 - 홈 화면 추가 ]
<홈 컨트롤러>
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
<회원 관리용 홈>
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<div>
<h1>Hello Spring</h1>
<p>회원 기능</p>
<p>
<a href="/members/new">회원 가입</a>
<a href="/members">회원 목록</a>
</p>
</div>
</div> <!-- /container -->
</body>
</html>
<실행 결과>
[ 회원 웹 기능 - 등록]
<회원 등록 컨트롤러>
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
/*
회원 등록 폼 컨트롤러 추가
*/
@GetMapping("/members/new")
public String createHome() {
return "members/createMemberForm";
}
}
<회원 등록 폼 HTML>
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<form action="/members/new" method="post">
<div class="form-group">
<label for="name">이름</label>
<input type="text" id="name" name="name" placeholder="이름을
입력하세요">
</div>
<button type="submit">등록</button>
</form>
</div> <!-- /container -->
</body>
</html>
<실행 결과>
[ 회원 웹 기능 - 조회]
< 회원 컨트롤러에서 조회 기능 추가 >
@GetMapping("/members")
public String list(Model model) {
List<Member> members = memberService.findMembers();
model.addAttribute("members", members);
return "members/memberList";
}
< 회원 리스트 HTML 생성 >
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
<div>
<table>
<thead>
<tr>
<th>#</th>
<th>이름</th>
</tr>
</thead>
<tbody>
<tr th:each="member : ${members}">
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
</tr>
</tbody>
</table>
</div>
</div> <!-- /container -->
</body>
</html>
<실행결과>
반응형
'WINK-(Web & App) > Spring Boot 스터디' 카테고리의 다른 글
[2025 겨울방학 스프링 스터디] 김재승 #3주차 (0) | 2025.01.29 |
---|---|
[2025 겨울방학 스프링 스터디] 윤아영 #3주차 (0) | 2025.01.27 |
[2025 겨울방학 스프링 스터디] 정채은 #2주차 (0) | 2025.01.21 |
[2025 겨울방학 스프링 스터디] 김재승 #1주차~2주차 (0) | 2025.01.20 |
[2025 겨울방학 스프링 스터디] 윤아영 #2주차 (0) | 2025.01.20 |