본문 바로가기
프레임워크/Spring

[스프링 입문] 섹션 4,5 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

by 오오오니 2022. 5. 19.

 

강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

섹션4 스프링 빈과 의존관계

컴포넌트 스캔과 자동 의존관계 설정

자바 코드로 직접 스프링 빈 등록하기

섹션5 회원 관리 예제 웹 MVC 개발

회원 웹 기능 - 홈 화면 추가

회원 웹 기능 -등록

회원웹 기능 -조회

 

 

스프링 빈을 등록하는 2가지 방법

  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기
  • 컴포넌트 스캔과 자동 의존관계 설정
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 =new MemberService();
    //여러 곳에서 쓰이기 때문에 객체를 하나만 생성하고 공용으로 사용하면 된다.
    private  final MemberService memberService;//스프링 컨테이너에 등록을 하고 사용. 딱하나만 등록이 된다.

    @Autowired
    public MemberController(MemberService memberService) {//생성자에서 Autowired를 쓰면 멤버 컨트롤러가 생성이 될때
        this.memberService = memberService;               //스프링 빈에 등록되어 있는 멤버 서비스 객체를 가져다가 넣어줌
    }
}

 

*스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다.(유일하게 하나만 등록해서 공유)

따라서 같은 스프링 빈이면 모두 같은 인스턴스이다.

  • 자바 코드로 직접 스프링 빈 등록하기
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 {
    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }

}

정상적으로 실행은 잘 되는데 memberService가 왜 회색글씨로 나오는지 모르겠다.

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 =new MemberService();
    //여러 곳에서 쓰이기 때문에 객체를 하나만 생성하고 공용으로 사용하면 된다.
    private  final MemberService memberService;//스프링 컨테이너에 등록을 하고 사용. 딱하나만 등록이 된다.

//    @Autowired //setter주입
//    public void setMemberService(MemberService memberService) {
//        this.memberService = memberService;
//    }
    @Autowired  //생성자 주입을 쓰는 것이 좋다.
    public MemberController(MemberService memberService) {//생성자에서 Autowired를 쓰면 멤버 컨트롤러가 생성이 될때
        this.memberService = memberService;               //스프링 빈에 등록되어 있는 멤버 서비스 객체를 가져다가 넣어줌
    }
}
  • 회원 웹 기능 - 홈 화면 추가

  • 회원 웹 기능 -등록

package hello.hellospring.controller;

import hello.hellospring.domain.Member;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
public class MemberController {
    //private  final MemberService memberService =new MemberService();
    //여러 곳에서 쓰이기 때문에 객체를 하나만 생성하고 공용으로 사용하면 된다.
    private  final MemberService memberService;//스프링 컨테이너에 등록을 하고 사용. 딱하나만 등록이 된다.

//    @Autowired //setter주입
//    public void setMemberService(MemberService memberService) {
//        this.memberService = memberService;
//    }
    @Autowired  //생성자 주입을 쓰는 것이 좋다.
    public MemberController(MemberService memberService) {//생성자에서 Autowired를 쓰면 멤버 컨트롤러가 생성이 될때
        this.memberService = memberService;               //스프링 빈에 등록되어 있는 멤버 서비스 객체를 가져다가 넣어줌
    }

    @GetMapping("/members/new")
    public String createForm(){
        return "members/createMemberForm";
    }

    @PostMapping("/members/new")
    public String create(MemberForm form){
        Member member = new Member();
        member.setName((form.getName()));
        memberService.join(member);

        return "redirect:/";
    }
}

데이타를 등록할 때는 보통 Post를 쓴다.

  • 회원웹 기능 -조회

오류가 나서 리스트 조회가 안된다 나중에 고쳐봐야겠다.​

됐다.

html파일을 삭제하고 새로 만들었다.