스프링 DI 관련 어노테이션
AUTO-SCANNING COMPONENT
이종철, 탑크리에듀(topcredu.co.kr)
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 어노테이션으로 설정한다.
@Component
• 일반적인 용도의 컴포넌트들을 표시하는 기본 스테레오 타입, 멤버변수
와 getter, setter만 가지고 있는 DTO 같은 컴포넌트를 가리킨다.
• 스프링이 @Component 붙은 자바 클래스를 클래스패스 경로에서 자동
으로 찾아 Application Context안에 이름을 부여하여 빈으로 등록한다.
빈의 기본 Scope는 songleton이며 @Scope 어노테이션으로 변경 가능
하다.
• value속성으로 빈의 이름을 지정 가능하며 지정하지 않으면 클래스명 첫
글자로 소문자로 바꾼 형태가 빈의 이름이 된다.
@Component
//하나의 Bean 정의에 대해서 다수의 객체가 존재하며
//생략하면 Singleton으로 생성된다.
@Scope("prototype")
public class Emp {
.....
}
@Service
• 비즈니스 로직을 담고 있는 서비스 레이어의 서비스 컴포넌트를 가리키
며 @Component 어노테이션과 동작은 같지만, 서비스 계층의 클래스들
은 @Service 어노테이션을 부여하는 것이 코드 가독성 면에서 좋다.
@Service
public class EmpServiceImpl implements EmpService {
.....
@Autowired
private EmpRepository empRepository;
}
@Repository
• 퍼시스턴스 레이어의 DAO컴포넌트에 부여하는 어노테이션
• @Component 의 역 할 과 유 사 하 며 DAO 메 소 드 가 던 지 는 예 외
(Unckecked Exception)를 스프링의 DataAccessException으로 변환한다.
@Repository
public class EmpRepositoryImpl implements EmpRepository {
.....
}
@Controller
• Spring Web MVC에서 프리젠테이션 레이어의 웹컨트롤러 컴포넌트를
지칭한다.
• @Component의 역할과 유사하여 어노테이션이 붙은 클래스는 자동으
로 DI 컨테이너의 빈으로 등록되고 @RequestMapping 어노테이션등을
사용하여 사용자의 요청을 처리할 컨트롤러 메소드를 정의할 수 있다.
@Controller
public class EmpController {
@Autowired
private EmpdService empService;
@RequestMapping(“save”)
public Emp save(Emp e) {
……
}
}
@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) { … }
THIS PRACTICE MAKES THE EXPERT!
스프링,마이바티스기초
단기속성과정
자바기초에서JSP스프링,
MyBatis까지
Spring Framework & JPA

(스프링 초보자를 위한)스프링 DI관련 어노테이션,자동스캐닝 컴포넌트(Spring Framework Auto-Scanning Component)

  • 1.
    스프링 DI 관련어노테이션 AUTO-SCANNING COMPONENT 이종철, 탑크리에듀(topcredu.co.kr)
  • 2.
    AUTO-SCANNING COMPONENT ANNOTATION (STEREOTYPINGANNOTATIONS) • 스프링 컨테이너는 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 WebMVC에서 프리젠테이션 레이어의 웹컨트롤러 컴포넌트를 지칭한다. • @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 MAKESTHE EXPERT! 스프링,마이바티스기초 단기속성과정 자바기초에서JSP스프링, MyBatis까지 Spring Framework & JPA