[웹개발] 스프링 애너테이션
DI나 AOP와 같은 용어의 설명을 모른다면 아래의 게시글을 먼저보고오자.
https://kimgom2.tistory.com/301?category=916992
[웹개발] 스프링 프레임워크
프레임 워크? 사전적 의미로는 '어떤 것을 구성하는 구조 또는 뼈대'로 소프트웨어적 의미로는 '기능을 미리 클래스나 인터페이스 등으로 만들어 제공하는 반제품' 정도로 해석할 수 있다. 즉,
kimgom2.tistory.com
스프링 애너테이션?
DI나 AOP와 같은 기능을 따로 XML파일로 설정한 후 애플리케이션에서 사용하면, 애플리케이션의 기능이 복잡해짐에 따라 XML 설정 파일의 내용도 복잡해지고 관리에도 문제가 생기기 시작한다. 따라서 스프링 3.0부터는 DI 같은 자바 코드와 관련된 설정은 직접 코드에서 할 수 있도록 애너테이션(Annotaion)이라는 기능을 제공한다. 현재 스프링 기반 애플리케이션에서는 XMl에서 설정하는 방법과 애너테이션 기능을 사용하는 방법 두 가지를 혼합해서 사용하고 있다.
스프링 애너테이션 제공 클래스
스프링에서 애너테이션을 사용하려면 먼저 스프링에서 제공하는 애너테이션 관련 클래스를 XMl 설정 파일에서 빈으로 설정해야 한다.
클래스 | 기능 |
DefaultAnnotationHandlerMapping | 클래스 레벨에서 @RequestMapping을 처리 |
AnnotationMethodHandlerAdapter | 메서드 레벨에서 @RequestMapping을 처리 |
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<context:component-scan>기능
<context:component-scan> 태그를 사용해 패키지 이름을 지정하면 애플리케이션 실행 시 해당 패키지에서 애너테이션으로 지정된 클래스를 빈으로 만들어 준다.
<context:component-scan base-package="패키지 이름" />
<context:component-scan base-package="com.spring"/>
<context:component-scan> 태그로 지정한 패키지에 위치하는 클래스에 지정하는 여러가지 애너테이션
애너테이션 | 기능 |
@Controller | 스프링 컨테이너가 component-scan에 의해 지정한 클래스를 컨트롤러 빈으로 자동 변환 |
@Service | 스프링 컨테이너가 component-scan에 의해 지정한 클래스를 서비스 빈으로 자동 변환 |
@Repository | 스프링 컨테이너가 component-scan에 의해 지정한 클래스를 DAO 빈으로 자동 변환 |
@Component | 스프링 컨테이너가 component-scan에 의해 지정한 클래스를 빈으로 자동 변환 |
@Controller("memberController")
public class MemberControllerImpl implements MemberController {
//클래스 구현
}
@Service("memberService")
public class MemberServiceImpl implements MemberService {
//클래스 구현
}
@Repository("memberDAO")
public class MemberDAOImpl implements MemberDAO {
//클래스 구현
}
@Component("memberVO")
public class MemberVO {
//클래스 구현
}
@Autowired 이용해 빈 주입
XML에서 빈을 설정한 후 애플리케이션이 실행될 때 빈을 주입해서 사용하면 XML파일이 복잡해지면서 사용 및 관리가 불편하다는 단점이 있다. 이러한 점을 해결하기 위해 현재 스프링에서는 @Autowired를 이용해 개발자가 만든 클래스들의 빈을 직접 자바코드에서 생성하여 사용한다.
@Controller("memberController")
public class MemberControllerImpl implements MemberController {
//빈 자동 주입
@Autowired
private MemberService memberService;
@Autowired
private MemberVO memberVO ;
//클래스 구현
}
@Autowired 특징
- 기존 XML 파일에서 각각의 빈을 DI로 주입했던 기능을 코드에서 애너테이션으로 자동으로 수행
- @Autowired를 사용하면 별도의 setter나 생성자 없이 속성에 빈 주입이 가능