본문 바로가기

IT for developer/Spring

나도 한번 써봐야지 스프링 - 4



서비스 클래스와 모델 클래스를 추가해 보자.


비즈니스 로직을 포함하고 있는 서비스 클래스를 추가하여 컨트롤러 클래스에 DI 하고 id만 출력하던것을 이름, 이메일, 아이디를 출력하도록 변경하여 보자.


우선 서비스 클래스를 만들기 전에 서비스 인터페이스를 만들자. 컨트롤러에서는 직접 구현 클래스를 기술하지 않고  인터페이스로 서비스를 호출하도록한다.


다음 세가지 클래스를 추가한다.

User.java
MyService.java
MyServiceImpl.java



User.java

package sample.mvc.first.model;


public class User {

String id;

String name;

String email;


    public User() {}

public User(String id, String name, String email, String securityNum) {

this.id = id;

this.name = name;

this.email = email;


}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}


}


MyService.java

package sample.mvc.first;


import sample.mvc.first.model.User;


public interface MyService {


public User getUser(String id);

}



MyServiceImpl.java

package sample.mvc.first.impl;


import org.springframework.stereotype.Component;

import sample.mvc.first.MyService;

import sample.mvc.first.model.User;


@Component

public class MyServiceImpl implements MyService {


public User getUser(String id) {

return new User("inking007", "kim", "inking007@gmail.com");

}


}




@Component 에노테이션을 사용하면 클래스 이름의 첫글자만 소문자로 바꾼 이름을 가진 빈을 등록한다.
예제에서는 myServiceImpl 이라는 이름을 가진 빈을 등록하게된다. 

컨트롤러에서 서비스를 호출해 보자.

package sample.mvc.first;


import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;


import sample.mvc.first.model.User;


@Controller

public class HomeController {

@Autowired MyService myService;

private static final Logger logger = LoggerFactory.getLogger(HomeController.class);


@RequestMapping(value="/", method=RequestMethod.GET)

public String home(@RequestParam String id, ModelMap model) {

logger.info("Welcome home!");

User user = myService.getUser(id);

model.put("user", user);

return "home";

}

}



@Autowired 에노테이션은 타입에 의한 자동와이어링 방식으로 동작한다. 등록된 Bean들 중에서 해당 타입에 해당하는 빈을 연결해 준다. (J2EE 6 표준스펙 JSR-330 @Inject 에노테이션과 거의 동일하다.) (toby spring 3 p838 참고)


이제 마지막으로 jsp에서 id, 이름, email을 출력하도록 하자.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ page session="false" %>

<html>

<head>

<title>Home</title>

</head>

<body>

<h1>

${user.id}, ${user.name}, ${user.email}

</h1>

</body>

</html>