-이전글-
의존관계 주입(DI)을 할 때 사용하는 어노테이션(Annotation)이며, IoC컨테이너에 존재하는 빈(Bean)을 찾아 주입하는 역할을 한다.
public class StudyContoroller{
private StudyService studyService;
public void studyPrint(){
System.out.println(studyService.getClass());
}
}
<bean id="studyService" class="org.springframework.StudyService" />
<bean id="studyController" class="org.springframework.StudyController" >
<constructor-arg naem="studyService" ref="studyService" />
</bean>
@Configuration
public class AppConfig {
@Bean
public StudyService studyService() {
return new StudyService();
}
}
XML파일 또는 @Bean어노테이션을 사용하여 직접 의존성을 주입해주어야한다.
@Controller, @Service, @Repository 등의 어노테이션을 사용하여 빈(Bean)을 등록할 때에는 해당 패키지를 스캔할 수 있도록 component-scan 설정을 해주어야한다.
component-scan은 아래 포스팅을 참고 바란다.
[Spring/개념] - [Spring] component-scan 사용이유
@Controller
public class StudyContoroller{
@Autowired
private StudyService studyService;
public void studyPrint(){
System.out.println(studyService.getClass());
}
}
객체의 의존성을 가지는 부분에 @Autowired를 사용하여 의존성을 주입해줄 수 있다.
public class CafeStudy implements StudyService {....}
public class SchoolStudy implements StudyService {....}
@Controller
public class StudyContoroller{
@Autowired
private StudyService studyService;
}
StudyService 인터페이스를 상속받는 두개의 클래스가 있다면 어떤 것을 선택해야 할 지 몰라서 에러가난다.
방법1) @Primary
@Primary
public class CafeStudy implements StudyService {....}
public class SchoolStudy implements StudyService {....}
@Primary 어노테이션을 사용하여 우선순위를 정해준다.
방법2) @Qualifier
@Qualifier("cafestudy")
public class CafeStudy implements StudyService {....}
@Qualifier("SchoolStudy")
public class SchoolStudy implements StudyService {....}
@Controller
public class StudyContoroller{
@Autowired
@Qualifier("cafestudy")
private StudyService studyService;
}
@Qualifier 단어 그대로 수식어를 추가해줘서 추가정보를 제공한다.
@Qualifier이 @Primary보다 우선순위가 높음으로 두개의 어노테이션을 적절히 사용하면 된다.
@Autowired를 사용하면서 관행적(?), 무조건적(?)으로 인터페이스를 선언하여 사용하지 않았는가?
다음 포스팅에서 이에대해 정리해보고자 한다.
Spring AOP (Proxy) - Logging 적용 (0) | 2021.10.08 |
---|---|
@Autowired 인터페이스 사용이유 (0) | 2021.10.07 |
[Spring] component-scan 사용이유 (0) | 2021.10.05 |
DI(의존성 주입) (0) | 2021.10.03 |
DispatcherServlet (2) | 2021.09.23 |
댓글 영역