스프링 프레임워크는 빈을 다루는 기술인데, 스프링 컨테이너는 base-package의 클래스를 검색해서 자동으로 자바 빈으로 등록하는 데 이에 해당하는 것이 @Component, @Repository, @Service, @Contoroller, @RestController 어노테이션인데 그와 관련하여 PPT로 간단히 소개 합니다.
1. 스프링 DI 관련 어노테이션
AUTO-SCANNING COMPONENT
이종철, 탑크리에듀(topcredu.co.kr)
2. AUTO-SCANNING COMPONENT ANNOTATION
(STEREOTYPING ANNOTATIONS)
• 스프링 컨테이너는 base-package의 클래스를 검색해서 자동으로 자바
빈으로 등록하는 데 이에 해당하는 것이 @Component, @Repository,
@Service, @Contoroller, @RestController 어노테이션이다.
• 자동스캔을 위해서는XML 파일에서 <context:component-scan base-
package=“edu.spring.topcredu" /> 과 같이 base-package를 기술하며,
패키지가 여러개인 경우 콤마로 구분하여 기술한다. 또한 자바 설정 클래
스(@Configuration)에서는 @ComponentScan 어노테이션으로 설정한다.
3. @Component
• 일반적인 용도의 컴포넌트들을 표시하는 기본 스테레오 타입, 멤버변수
와 getter, setter만 가지고 있는 DTO 같은 컴포넌트를 가리킨다.
• 스프링이 @Component 붙은 자바 클래스를 클래스패스 경로에서 자동
으로 찾아 Application Context안에 이름을 부여하여 빈으로 등록한다.
빈의 기본 Scope는 songleton이며 @Scope 어노테이션으로 변경 가능
하다.
• value속성으로 빈의 이름을 지정 가능하며 지정하지 않으면 클래스명 첫
글자로 소문자로 바꾼 형태가 빈의 이름이 된다.
@Component
//하나의 Bean 정의에 대해서 다수의 객체가 존재하며
//생략하면 Singleton으로 생성된다.
@Scope("prototype")
public class Emp {
.....
}
4. @Service
• 비즈니스 로직을 담고 있는 서비스 레이어의 서비스 컴포넌트를 가리키
며 @Component 어노테이션과 동작은 같지만, 서비스 계층의 클래스들
은 @Service 어노테이션을 부여하는 것이 코드 가독성 면에서 좋다.
@Service
public class EmpServiceImpl implements EmpService {
.....
@Autowired
private EmpRepository empRepository;
}
5. @Repository
• 퍼시스턴스 레이어의 DAO컴포넌트에 부여하는 어노테이션
• @Component 의 역 할 과 유 사 하 며 DAO 메 소 드 가 던 지 는 예 외
(Unckecked Exception)를 스프링의 DataAccessException으로 변환한다.
@Repository
public class EmpRepositoryImpl implements EmpRepository {
.....
}
6. @Controller
• Spring Web MVC에서 프리젠테이션 레이어의 웹컨트롤러 컴포넌트를
지칭한다.
• @Component의 역할과 유사하여 어노테이션이 붙은 클래스는 자동으
로 DI 컨테이너의 빈으로 등록되고 @RequestMapping 어노테이션등을
사용하여 사용자의 요청을 처리할 컨트롤러 메소드를 정의할 수 있다.
@Controller
public class EmpController {
@Autowired
private EmpdService empService;
@RequestMapping(“save”)
public Emp save(Emp e) {
……
}
}
7. @RestController
• @Controller를 상속받아 @Controller + @ResponseBody와 같은 의미로
흔히 Restful 웹서비스를 구현할 때 응답은 항상 응답바디(response body)
에 보내져야 하는데, 이를위해 스프링4.0이상에서 특별히 @RestController
를 제공한다.
• 도메인 객체를 Web Service로 노출 가능하며 각각의 @RequestMapping
메소드에 @ResponseBody 어노테이션을 사용할 필요가 없다. 그러므로
Spring Web MVC 컨트롤러에서 클라이언트 브라우저로 JSON 포맷으로
데이터를 넘길 수 있다.
@RestController
@RequestMapping("emp")
public class EmpController {
@RequestMapping(value = "/{name}", method = RequestMethod.GET,
produces = "application/json")
public Emp getEmployeeInJSON(@PathVariable String name) { … }
8. THIS PRACTICE MAKES THE EXPERT!
스프링,마이바티스기초
단기속성과정
자바기초에서JSP스프링,
MyBatis까지
Spring Framework & JPA