진이의 Developer Story
스트레오타입 애노테이션 정리 (16. 01. 12) 본문
@Autowired와 @Resource
위의 2가지 애노테이션은 모두 의존성 주입을 하는 애노테이션입니다.
|
@Autowired |
@Resource |
패키지 |
org.springframework.beans |
javax.annotation.Resource |
우선순위 |
ByType -> ByName |
ByName -> ByType |
비고 |
@Qualifier와 함께 사용 가능 |
name 어트리뷰트 |
public class Person {
String name;
String job;
getter/setter...
}
<bean id="person1" class="com.spring.Person">
<constructor-arg>
<value>person1</value>
<value>programmer</value>
</constructor-arg>
</bean>
<bean id="person2" class="com.spring.Person">
<constructor-arg>
<value>person2</value>
<value>teacher</value>
</constructor-arg>
</bean>
(1) @Autowired
@Autowired 애노테이션은 IoC 컨테이너에 만들어져있는 bean 을 검색하여 자동으로 주입해주는 애노테이션입니다.
따라서 같은 타입의 빈이 2개 이상 존재한다면 에러가 발생합니다.
이럴 경우 @Qualifier 애노테이션을 사용하여 사용할 빈의 이름을 지정해줄 수 있습니다.
@Autowired
@Qualifier("person1")
설정은 생성자, 필드, 메소드에 적용할 수 있습니다.
(2) @Resource
@Resource
애노테이션은 빈 이름이 일치하는 빈을 주입을
해줍니다.
@Resource(name="person1")
private Person person1;
@Resource(name="person2")
private Person person2;
여기서 name 속성을 적지 않을 경우, 변수이름에서 첫글자를 소문자로 변경하여 지정됩니다.
현재 소스
코드에서는 각각 person1과 person2 로 지정해주었습니다.
(3) @Controller, @Repository, @Service
애노테이션 |
특징 |
@Controller |
프레젠테이션 계층의 MVC 컨트롤러에 사용됩니다. |
@Service |
서비스 계층의 클래스에 사용됩니다. |
@Repository |
데이터 액세스 계층의 DAO 또는 리포지토리 클래스에 사용됩니다. DataAccessException 자동변환과 같은 AOP의 적용 대상을 선정하기 위해서도 사용됩니다. |
@Controller
public class PersonController {
protected static Logger logger = Logger.getLogger("controller");
@Resource(name="personService")
private PersonService personService;
// controller methods
}
@Service("personService")
public class PersonService {
protected static Logger logger = Logger.getLogger("PersonService");
// service methods here
}
위의
코드에서 personService 클래스를 빈으로 만들고 빈의 이름을 personService로 지정합니다.
그리고
컨트롤러에서는 personService 빈을 @Resource를 사용하여 주입하고 있습니다.
반드시 빈의 이름이 같아야지만 정상적으로 의존성
주입이 되며, 다를 경우는 Error!
@Repository의 경우도 마찬가지입니다.
해당 DAO를 빈으로 만들어주고 이를 Service
클래스에서 주입을 해줘야 합니다.
'Java > Spring' 카테고리의 다른 글
(3) Spring+MyBatis 게시판 만들기 - MyBatis 셋팅 (34) | 2016.01.20 |
---|---|
(2) Spring+MyBatis 게시판 만들기 - DB 셋팅 (0) | 2016.01.20 |
(1) Spring+MyBatis 게시판 만들기 - 프로젝트 구성 (1) | 2016.01.20 |
MyBatis Error (0) | 2016.01.18 |
이해하기 쉬운 스프링 (0) | 2016.01.12 |