-
스프링 4.0 - DI : 의존성주입 자동 연결웹프로그래밍/spring 2018. 7. 10. 21:13
어노테이션을 이용한 객체 의존 자동연결
스프링 빈 객체의 간단한 의존 관계 설정을 아래 어노테이션으로 간단히 한다.
먼저, XML 설정 파일에 아래 코드로 전처리기 빈을 등록한다.
<context:annotation-config>
※위 코드가 등록해주는 자동 연결과 관련 된 스프링 빈
org.springframework.beans.factory.AutowiredAnnotationBeanPostProcessor
org.springframework.beans.factory.annotation.QuailifierAnnotationAutowireCandidateResolver
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor
@Autowired - org.springframework.beans.factory.annotation.Autowired
생성자, 필드(변수), 메서드(set,일반)에 사용가능
어노테이션이 적용되어 있다면 해당하는 bean 객체 클래스 타입을 스프링컨테이너 안에서 검색하고 자동으로 DI 한다.
스프링 컨테이너 안에 해당 객체 타입이 없을 경우, BeanCreationException 발생
-> @Autowired(required=false)로 해결. null 값을 리턴한다.
같은 클래스 타입의 bean이 2개 이상일 경우, NoUniqueBeanDefinitionException 발생
-> 번거롭지만 @Qualifier("")으로 해결, XML에서 bean을 정의할때 <qualifier value=""> 속성을 추가하고 클래스에서 @Qualifier을 적용한다.
@Resource - javax.annotation.Resource
이름(bean "id")를 기준으로 bean 객체를 선택한다. @Resource(name="")에 일치하는 bean 객체가 없을 경우 익셉션 발생
어노테이션의 name이 없을 경우, 필드 이름이나 프로퍼티 이름을 사용한다. 없을 경우 역시 익셉션 발생
@Inject
pom.xml에 아래 메이븐 의존 설정 추가
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
@Named 어노테이션으로 bean 이름으로 객체를 불러올 수 있다.
반드시 xml 설정에서 bean 객체가 존재해야 한다.
컴포넌트 스캔을 이용한 빈 자동 등록
특정 패키지(하위 패키지 포함)에 위치한 클래스를 어노테이션을 기준으로 스프링 bean으로 자동 등록해주는 기능.
<context:component-scan base-package="패키지 경로"> 태그로 패키지 지정
<context:component-scan base-package="com"></context:component-scan>
클래스를 스프링 빈으로 등록하면서 의존 객체를 전달하려면 @Resource,@Autowired 등을 추가로 적용한다.
자동으로 검색한 클래스의 맨 앞글자를 소문자로 바꿔서 빈에 등록한다. 특정한 이름을 지정하려면 @Component("")
@Controller
public class OrderController {
@Resource(name="orderService")
private OrderService orderService;
.
.
.
-스캔 대상인 어노테이션
@Component - org.springframework.stereotype.Component
@Service - org.springframework.stereotype.Service
@Repository - org.springframework.stereotype.Repository
@Controller - org.springframework.stereotype.Controller
'웹프로그래밍 > spring' 카테고리의 다른 글
스프링4.0 - Validator / Errors / BindingResult로 객체 검증 : 에러 메시지 (0) 2018.07.17 스프링4.0 - AOP : @Aspect 기반 (0) 2018.07.16 스프링4.0 - AOP 기초 (0) 2018.07.15 스프링 4.0 - DI(Dependency Injection) : 의존성 주입 - 수동 설정 (0) 2018.07.10 스프링3.0 - Database 연동하기 (0) 2018.07.03