객체간 DI를 설정할 때 설정 코드를 줄이기 위해서는 객체간 의존을 자동설정해주는 @Autowired, @Resource를 이용하면 불필요한 코드들을 줄일 수 있다. 이런 애노테이션은 메서드, 생성자, 필드에 모두 사용할 수 있다.
가장먼저, <context:annotation-config/>를 선언해서 다수의 스프링 전처리기를 등록한다.
@Autowired는 타입에맞는 빈을 자동설정 하고, @Resource는 이름에 맞는 빈을 자동설정한다.
(1) @Autowired 애노테이션 적용 프로퍼티의 필수 여부 지정
스프링은 @Autuwired를 발견하면 자동으로 그에 맞는 빈을 설정한다. 하지만 그에 맞는 빈을 찾지 못한다면 다음과 같은 익셉션을 발생시킨다.
...expected at least 1 bean...(적어도 1개의 빈...)
이런 익셉션이 발생하지 않게하고 null로 유지하고 싶으면 @Autowired(required = false)로 지정하면된다.
(2) @Resource 애노테이션을 사용한 의존 자동 설정
@Resource(name = "빈 이름") 형식으로 객체 의존을 설정한다. @Autowired 애노테이션과 같이 name에 맞는 빈객체가 없을 경우 익셉션을 발생시킨다. 만약 name을 지정하지않으면 @Autowired와 동일하게 동작한다.
(3) component-scan을 통한 빈 자동설정
특정 패키지에 위치한 클래스를 스프링 빈으로 자동등록해주는 설정방식이다. 지정하는 방식은 다음과 같다.
<context:component-scan base-package = "패키지명.*"/>
이 태그를 사용하면 @Component, @Autowired, @Required, @Resource, @Inject 같은 어노태이션들도 같이 처리해준다. @Componet 애노테이션은 용도별로 의미를 부여하는 하위 타입을 가지고 있다.
- @Controller : 웹 MVC의 컨트롤러를 의미
- @Service : 비즈니스로직을 처리하는 Service를 의미
- @Repository : 주로 DB와 직접 연결하는 클래스를 의미
쉬운듯 어려운 것 같다...
'Spring' 카테고리의 다른 글
Spring(6) - 스프링 MVC프로젝트 (0) | 2019.04.12 |
---|---|
Spring(5) - AOP(관점지향프로그래밍) (0) | 2019.04.10 |
Spring(4) - 빈의 생명주기와 범위 (0) | 2019.04.10 |
Spring(2) - DI(의존성 주입)이란? (0) | 2019.04.09 |
Spring(1) - Spring과Maven (0) | 2019.04.09 |