[TIL]航海9917日目


2週目から主な特長を深める.

MVC(Model - View - Controller)

@Controller
@RequestMapping("/hello/response")
public class HelloResponseController {

    @GetMapping("/html/redirect")
    public String htmlFile() {
        return "redirect:/hello.html";
    }
@GetMapping("/html/templates")
public String htmlTemplates() {
    return "hello";
}
@GetMapping("/body/html")
@ResponseBody
public String helloStringHTML() {
    return "<!DOCTYPE html>" +
           "<html>" +
               "<head><meta charset=\"UTF-8\"><title>By @ResponseBody</title></head>" +
               "<body> Hello, 정적 웹 페이지!!</body>" +
           "</html>";
}
    @GetMapping("/html/dynamic")
public String helloHtmlFile(Model model) {
    visitCount++;
    model.addAttribute("visits", visitCount);
    // resources/templates/hello-visit.html
    return "hello-visit";
}
private static long visitCount = 0;

@GetMapping("/json/string")
@ResponseBody
public String helloStringJson() {
    return "{\"name\":\"BTS\",\"age\":28}";
}
@GetMapping("/json/class")
@ResponseBody
public Star helloJson() {
    return new Star("BTS", 28);
}}


IoC容器

  • 空(bean):スプリングによって管理されるオブジェクト
  • スプリングIoC容器:「空」を集めたバケツ
  • 空の登録方法


    クラスに@Componentを設定
    @Component
    public class ProductService { ... }
    @Componentの役割
    // 1. ProductService 객체 생성
    ProductService productService = new ProductService();
    
    // 2. 스프링 IoC 컨테이너에 빈 (productService) 저장
    // productService -> 스프링 IoC 컨테이너
    スプリングの空の名前:クラスの先頭文字のみを小文字に変更
  • public class ProductServcie → productServcie
  • @Bean
    ダイレクトオブジェクト
  • を作成し、空の登録を要求する
  • import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class BeanConfiguration {
    
        @Bean
        public ProductRepository productRepository() {
            String dbUrl = "jdbc:h2:mem:springcoredb";
            String dbId = "sa";
            String dbPassword = "";
    
            return new ProductRepository(dbUrl, dbId, dbPassword);
        }
    }
  • スプリングサーバが起動すると、スプリングIoCに「空」
  • が保存される.
    // 1. @Bean 설정된 함수 호출
    ProductRepository productRepository = beanConfiguration.productRepository();
    
    // 2. 스프링 IoC 컨테이너에 빈 (productRepository) 저장
    // productRepository -> 스프링 IoC 컨테이너
    
  • スプリング「空」名:@beanが設定された関数名
  • public ProductRepository productRepository() {..} → productRepostory
    

    スプリングの空の使用方法


    @Autowired
  • メンバー変数宣言の上@Autowired
  • @Component
    public class ProductService {
    		
        @Autowired
        private ProductRepository productRepository;
    		
    }
  • 「空」を使用する関数で@Autowired
  • @Component
    public class ProductService {
    
        private final ProductRepository productRepository;
    
        @Autowired
        public ProductService(ProductRepository productRepository) {
            this.productRepository = productRepository;
        }
    		
    		// ...
    }