DI - Annotation을 이용한 설정

이지윤·2022년 4월 6일
0

Anotation

  • 메타데이터를 XML등의 문서에 설정하는 것이 아니라 소스코드에 @애노테이션의 형태로 표현
  • 클래스, 메소드, 필드의 선언부에 표현

주요 Annotation

  • @Autowired(@Inject)
    • 컨테이너가 빈과 다른 빈과의 의존성을 자동으로 연결하도록 하는 수단
    • 인스턴스 변수(빈) 앞에 @Autowired 붙여 해당 타입의 Component(빈)를 찾아 그 인스턴스(빈)를 주입
    • <context:annotation-config/> 설정이 필요
    • 단 <context:component-scan />가 설정되어 있으면 생략 가능하다.
  • @Component(@Named)
    • 컨테이너가 인젝션을 위한 인스턴스(빈)을 설정하는 수단
    • 클래스 선언 앞에 @Component를 붙여 컨테이너가 찾아서 관리
    • @Autowired가 붙은 인스턴스 변수에 주입
    • <context:component-scan base-package=“패키지 이름"/> 선언은 @Component 애노테이션이 붙은 클래스를 자동으로 빈으로 등록하는 기능

빈 정의 파일의 주요 스키마 (ApplicationContext.xml)

스프링 주요 태그 - <context:annotation-config>

  • @Autowired, @Resource, @Required
  • xml 파일에 이미 등록된 빈들의 애노테이션 기능을 적용
  • 빈을 등록하기 위한 검색 기능 X
  • 태그 선언되었을 경우 생략 가능
    • <mvc:annotation-driven />
    • <context:component-scan />

스프링 주요 태그 - <context:component-scan base-package=“패키지명”/>

  • @Component, @Service, @Repository, @Controller
  • 특정 패키지 안에 클래스를 검색해 빈을 자동으로 찾아서 DI컨테이너에 등록
  • <context:annotation-config /> 를 선언할 필요 X

@component 확장 애노테이션

  • @Controller : 프레젠테이션 층 스프링 MVC용 애노테이션
  • @Service : 비즈니스 로직 층 Service용 애노테이션
  • @Repository : 데이터 액세스 층의 DAO용 애노테이션
  • @Configuration : Bean 정의를 자바 프로그램에서 실행하는 JavaConfig용 애노테이션

di-annotation 예제

프로젝트 구성

프로젝트 만들기

<context:annotation-config /> 설정

  • ApplicationContext.xml 설정
 <bean id="memberDAO" class="org.tukorea.di.persistance.MemberDAOImpl">
	</bean>
	<bean id="memberService" class="org.tukorea.di.service.MemberServiceImpl">
	</bean>
	<context:annotation-config/> 
  • MemberDAOImpl.java
package org.tukorea.di.persistence; 
import java.util.HashMap;
import java.util.Map;
import org.tukorea.di.domain. StudentVO;

public class MemberDAOImpl implements MemberDAO {
	private Map<String, StudentVO> 	storage = new HashMap<String, StudentVO>();
	
    public StudentVO read(String id) throws Exception {
		return storage.get(id);
	}
	public void add(StudentVO student) throws Exception {
		storage.put(student.getId(), student);
	} 
}
  • MemberServiceImpl.java
package org.tukorea.di.service;
import org.tukorea.di.domain.MemberVO;
import org.tukorea.di.persistence.MemberDAO;
import org.springframework.beans.factory.annotation.Autowired;

public class MemberServiceImpl implements MemberService { 
	@Autowired
	private MemberDAO memberDAO;
    
	public StudentVO readMember(String id) throws Exception {
		return memberDAO.read(id);
	}
    
	public void addMember(StudentVO student) throws Exception {
    	memberDAO.add(student);
	} 
}

<context:component-scan /> 설정

  • ApplicatioContext.xml 설정
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="org.tukorea.di.persistence"></context:component-scan>
<context:component-scan base-package="org.tukorea.di.service"></context:component-scan>
</beans>
  • MemberDAOImpl.java
package org.tukorea.di.persistence;
import java.util.HashMap;
import java.util.Map;import org.tukorea.di.domain. StudentVO;
import org.springframework.stereotype.Component;

@Component
public class MemberDAOImpl implements MemberDAO {
	private Map<String, StudentVO> storage = new HashMap<String, StudentVO>();
	public StudentVO read(String id) throws Exception {
		return storage.get(id);
	}
	public void add(StudentVO student) throws Exception {
		 storage.put(student.getId(), student);
	} 
}
  • MemberServiceImpl.java
package org.tukorea.di.service;
import org.tukorea.di.domain.MemberVO;
import org.tukorea.di.persistence.MemberDAO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;

@Component
public class MemberServiceImpl implements MemberService { 
	@Autowired
	private MemberDAO memberDAO;
	public StudentVO readMember(String id) throws Exception {
		return memberDAO.read(id);
	}
	public void addMember(StudentVO student) throws Exception {
		memberDAO.add(student)
 	}
 }
profile
초보자

0개의 댓글