상세 컨텐츠

본문 제목

@Autowired 사용법

Spring/개념

by Chan.94 2021. 10. 6. 09:26

본문

반응형

-이전글-

[Spring/개념] - DI(의존성 주입)


@Autowired란?

의존관계 주입(DI)을 할 때 사용하는 어노테이션(Annotation)이며, IoC컨테이너에 존재하는 빈(Bean)을 찾아 주입하는 역할을 한다.


@Autowired를 사용하지 않고 의존성을 주입해주는 방법

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 사용이유


@Autowired 사용

@Controller
public class StudyContoroller{

	@Autowired
	private StudyService studyService;
    
	public void studyPrint(){
		System.out.println(studyService.getClass());
	}
}

객체의 의존성을 가지는 부분에 @Autowired를 사용하여 의존성을 주입해줄 수 있다.

 


 

같은 타입의 Bean이 여러개라면??

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/개념] - @Autowired 인터페이스 사용이유

반응형

'Spring > 개념' 카테고리의 다른 글

Spring AOP (Proxy)  (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

관련글 더보기

댓글 영역

>