코딩기록 저장소 🐕/spring(JPA)🌱

Spring DI 2

kimkongmom 2023. 10. 5. 09:02

 

 

 

 

 

 

웹 애플리케이션의 컨트롤러, 서비스, DAO, DTO 등을 포함한 구조

 

 

▶ MvcController

이 컨트롤러 클래스는 웹 애플리케이션의 첫 화면인 "index"를 보여주는 역할을 합니다. 

@Controller 어노테이션을 통해 스프링 컨트롤러임을 표시하고, 

@RequestMapping 어노테이션을 통해 "/" 경로로 들어오는 GET 요청에 대해 index( ) 메서드를 실행하여 

"index"라는 뷰(페이지)를 반환합니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.gdu.app05.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
@Controller
public class MvcController {
 
  @RequestMapping(value="/", method=RequestMethod.GET)
  public String index() {
    return "index";
  }
}
 
cs

 

 

 

 

BoardController

이 컨트롤러 클래스는 게시판과 관련된 웹 요청을 처리합니다. 

@Controller 어노테이션을 사용하여 스프링 컨트롤러임을 표시하고, 

생성자 주입을 통해 BoardService 타입의 boardService 객체를 주입받습니다. 

주입된 boardService를 통해 게시판 정보를 가져와 모델에 추가한 후 "board/list"라는 뷰를 반환합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.gdu.app05.controller;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
import com.gdu.app05.service.BoardService;
 
@Controller
public class BoardController {
  
  
  // 주입된 boardService 객체의 변경 방지를 위한 final 처리
  private final BoardService boardService;  
 
  // boardService에 final 처리를 하면 생성자 주입만 가능하다.
  // 생성자 주입의 @Autowired는 생략할 수 있으므로 @RequiredArgsConstructor와 같은 Annotation으로 대체할 수 있다.
  @Autowired
  public BoardController(BoardService boardService) {
    super();
    this.boardService = boardService;
  }
 
 
  @RequestMapping(value="/board/list.do", method=RequestMethod.GET)
  public String list(Model model) {
    model.addAttribute("boardList", boardService.getBoardList());
    return "board/list";
  }
}
 
cs

 

 

 

BoardService

 이 인터페이스는 게시판과 관련된 비즈니스 로직을 정의합니다. 

여기에서는 게시판 목록을 가져오는 메서드 getBoardList( )만 정의되어 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
package com.gdu.app05.service;
 
import java.util.List;
 
 
 
import com.gdu.app05.dto.BoardDto;
 
 
public interface BoardService {
  public List<BoardDto> getBoardList();
}
 
cs

 

 

 

 

 BoardServiceImpl

이 클래스는 BoardService 인터페이스를 구현한 구체적인 서비스 클래스입니다. 

@Service 어노테이션을 통해 스프링 빈임을 표시하며, 

생성자 주입을 통해 BoardDao 타입의 boardDao 객체를 주입받습니다. 

getBoardList( ) 메서드를 구현하여 게시판 목록을 데이터베이스 또는 다른 소스로부터 가져옵니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.gdu.app05.service;
 
import java.util.List;
 
 
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
 
import com.gdu.app05.dao.BoardDao;
import com.gdu.app05.dto.BoardDto;
 
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
 
 
@RequiredArgsConstructor  // final field 전용 생성자 
                          // @Autowired를 이용한 생성자 주입을 위해서 추가한다.
@Service // 서비스 계층 (Business Layer) 전용 @Component, Spring Container에 BoardService boardServiceImpl 객체를 생성해 둔다.
public class BoardServiceImpl implements BoardService {
  
  private final BoardDao boardDao; 
  
  @Override
  public List<BoardDto> getBoardList() {
    return boardDao.getBoardList();
  }
 
}
 
cs

 

 

 

 BoardDto

이 클래스는 게시판의 데이터를 전달하기 위한 데이터 전송 객체(DTO)입니다. 

@Data 어노테이션을 통해 Lombok을 사용하여 게터, 세터 등의 메서드를 자동으로 생성하고, 필드를 정의합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.gdu.app05.dto;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@NoArgsConstructor
@AllArgsConstructor
@Data
public class BoardDto {
  private String title;
  private String editor;
}
 
cs

 

 

 

 

 BoardDao

이 클래스는 데이터베이스와 상호 작용하여 게시판 정보를 가져오는 역할을 합니다.

 @Repository 어노테이션을 통해 스프링 빈임을 표시하며, 

getBoardList( ) 메서드에서 가짜 데이터를 반환하도록 구현되어 있습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.gdu.app05.dao;
 
import java.util.Arrays;
import java.util.List;
 
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
 
import com.gdu.app05.dto.BoardDto;
 
@Repository  // DAO 전용 @Component BoardDao boardDao 객체를 Spring Container에 생성해 둔다.
public class BoardDao {
 
  public List<BoardDto> getBoardList() {
    return Arrays.asList(
      new BoardDto("제목1""작성자1"),
      new BoardDto("제목2""작성자2"),
      new BoardDto("제목3""작성자3")
   );    
  }
}
 
cs

 

 

 

ex02 ================================================================================

 

 

 BoardConfig

이 클래스는 스프링 컨테이너에 빈(Bean)으로 등록될 여러 개의 객체를 생성하고 구성합니다.

여기에서 @Configuration 어노테이션이 사용되었는데, 이것은 이 클래스가 스프링 설정 클래스임을 나타냅니다. 스프링 컨테이너가 이 설정 클래스를 스캔하고 빈을 관리합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.gdu.app06.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import com.gdu.app06.dao.BoardDao;
import com.gdu.app06.dto.BoardDto;
import com.gdu.app06.service.BoardServiceImpl;
import com.gdu.app06.service.IBoardService;
 
@Configuration
public class BoardConfig {
 
  @Bean
  public BoardDto boardDto1() {  // <bean class="BoardDto" id="boardDto1" />
    return new BoardDto(1"제목1""작성자1");
  }
  
  @Bean
  public BoardDto boardDto2() {  // <bean class="BoardDto" id="boardDto2" />
    return new BoardDto(2"제목2""작성자2");
  }
  
  @Bean
  public BoardDto boardDto3() {  // <bean class="BoardDto" id="boardDto3" />
    return new BoardDto(3"제목3""작성자3");
  }
  
  @Bean
  public BoardDao boardDao() {
    return new BoardDao();
  }
  
  @Bean
  public IBoardService iBoardService() {
    return new BoardServiceImpl();
  }
  
}
cs

 

 

 BoardDao

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.gdu.app06.dao;
 
import java.util.Arrays;
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
 
import com.gdu.app06.dto.BoardDto;
 
public class BoardDao {
 
  private BoardDto boardDto1;
  private BoardDto boardDto2;
  private BoardDto boardDto3;
  
  @Autowired
  public void setBean(BoardDto boardDto1, BoardDto boardDto2, BoardDto boardDto3) {
    this.boardDto1 = boardDto1;
    this.boardDto2 = boardDto2;
    this.boardDto3 = boardDto3;
  }
 
  public List<BoardDto> getBoardList() {
    return Arrays.asList(boardDto1, boardDto2, boardDto3);
  }
  
  public BoardDto getBoardByNo(int boardNo) {
    BoardDto boardDto = null;
    if(boardDto1.getBoardNo() == boardNo) {
      boardDto = boardDto1;
    } else if(boardDto2.getBoardNo() == boardNo) {
      boardDto = boardDto2;
    } else if(boardDto3.getBoardNo() == boardNo) {
      boardDto = boardDto3;
    }
    return boardDto;
  }
  
}
cs

 

 

 

 

 BoardDto

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.gdu.app06.dto;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@NoArgsConstructor
@AllArgsConstructor
@Data
public class BoardDto {
 
  private int boardNo;
  private String title;
  private String editor;
  
}
 
cs

 

 

BoardService

 

1
2
3
4
5
6
7
8
9
10
package com.gdu.app06.service;
 
import java.util.List;
 
import com.gdu.app06.dto.BoardDto;
 
public interface IBoardService {
  public List<BoardDto> getBoardList();
  public BoardDto getBoardByNo(int boardNo);
}
cs

 

 

 

 

 

 BoardServiceImpl

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.gdu.app06.service;
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
 
import com.gdu.app06.dao.BoardDao;
import com.gdu.app06.dto.BoardDto;
 
 
public class BoardServiceImpl implements IBoardService {
 
  private BoardDao boardDao;
  
  @Autowired
  public void setBoardDao(BoardDao boardDao) {
    this.boardDao = boardDao;
  }
  @Override
  public BoardDto getBoardByNo(int boardNo) {
    return boardDao.getBoardByNo(boardNo);    
  }
  @Override
  public List<BoardDto> getBoardList() {
    return boardDao.getBoardList();    
  }
}
 
cs

 

 

 

 BoardController

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.gdu.app06.controller;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
 
import com.gdu.app06.service.IBoardService;
 
@Controller
public class BoardController {
 
  private IBoardService iBoardService;
 
  @Autowired
  public void setiBoardService(IBoardService iBoardService) {
    this.iBoardService = iBoardService;
  }
  
  @RequestMapping(value="/board/list.do", method=RequestMethod.GET)
  public String list(Model model) {
    model.addAttribute("boardList", iBoardService.getBoardList());
    return "board/list";    //   /WEB-INF/views/board/list.jsp
  }
  
  @RequestMapping(value="/board/detail.do", method=RequestMethod.GET)
  public String detail(@RequestParam(value="boardNo", required=false, defaultValue="0"int boardNo
                     , Model model) {
    model.addAttribute("board", iBoardService.getBoardByNo(boardNo));
    return "board/detail";  //   /WEB-INF/views/board/detail.jsp
  }
  
}
cs

 

 

 

 

'코딩기록 저장소 🐕 > spring(JPA)🌱' 카테고리의 다른 글

Spring ajax2  (0) 2023.10.06
Spring DI ajax  (0) 2023.10.05
Spring DI  (0) 2023.10.04
Spring Mvc 복습, Mvc Redirect  (0) 2023.10.04
Spring core 의존관계주입 자동 주입 (김영한의 스프링)  (0) 2023.10.01