백엔드/웹개발

[웹개발] 스프링 애너테이션

김곰댕 2022. 3. 15. 13:51
728x90

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나 생성자 없이 속성에 빈 주입이 가능
728x90