728x90
스프링 프레임 워크의 의존성 주입,
@Autowired & @Qualifier 는 의존성 주입을 할 떄 사용하는 애노테이션.
의존성 주입은 스프링이 자동으로 객체를 생성해주고 , 이를 필요한 곳에 주입하는 방식을 말한다.
@Autowired
@Autowired를 붙이면 , 스프링이 알아서 해당 타입의 빈을 찾아 멤버 변수에 넣어준다.
대입의 역할만 하는거고 직접 인스턴스를 생성하는 것이 아니기 때문에,
인스턴스는 미리 bean으로 생성이 되어 있어야한다.
스프링은 @Autowired를 보고 메모리에 있는 타입이 일치하는 객체를 자동으로 주입해준다.
속성으로는 required가 있다.
@Autowired(required = false)로 설정하면, 주입할 빈이 없을 때 오류를 발생시키지 않고 null을 주입
이를 통해 나중에 빈이 없을 때의 오류를 처리할 수있다.
@Component
class Speaker {
// Speaker 클래스가 스프링 빈으로 등록됨
}
@Component
class TV {
@Autowired(required = false)
private Speaker speaker; // Speaker 빈이 없으면 null이 주입됨
}
@Qualifier
@Autowired 는 타입에 따라 빈을 자동으로 주입하는데 , 만약 같은 타입의 빈이 여러개 있을 경우 어떤 빈을 주입할지 명확하지 않으면 오류가 발생된다. 이럴때 @Qualifier를 사용하여 특정 이름을 가진 빈을 지정할 수 있다.
만약 같은 타입의 빈이 여러개 있을 경우
@Qualifier 로 구체적으로 지정하지 않으면, NoUniqueBeanDefinitionException 이라는 오류가 발생
- Speaker 인터페이스를 구현한 두 개의 클래스 (SpeakerA와 SpeakerB)가 있다고 가정해 본다.
- @Qualifier("spa")는 "spa"라는 이름의 빈을 주입하겠다는 뜻이다.
public interface Speakeri {
// Speaker 인터페이스
}
@Component("spa")
class SpeakerA implements Speakeri {
// SpeakerA가 스프링 빈으로 등록됨
}
@Component("spb")
class SpeakerB implements Speakeri {
// SpeakerB가 스프링 빈으로 등록됨
}
@Component
class TV {
@Autowired(required = false)
@Qualifier("spa") // "spa"라는 이름의 빈을 주입
private Speakeri speaker;
}
Spring 의 어플리 케이션 실행 순서
- XML 설정에 따른 빈 스캔: @Component가 붙은 클래스들을 스캔하여 스프링 빈으로 등록.
- 빈의 주입: @Autowired나 @Qualifier에 따라 적절한 빈을 찾아서 주입.
- 메인 실행: main() 메소드가 실행되면서 실제 프로그램이 동작.
즉 , 스프링의 실행 순서: 빈 생성 → 의존성 주입 → 프로그램 실행.
'Developer > Spring eGov4.0 (Java11, Tomcat9)' 카테고리의 다른 글
Spring, 스프링의 MVC (1) | 2024.09.26 |
---|---|
Spring , java_config 방식을 활용한 스프링 빈 설정 관리, xml과 혼용 관리 (1) | 2024.09.26 |
Spring , @Component 스프링 빈 등록 (0) | 2024.09.24 |
Spring , 의존성 처리 방법 (1) | 2024.09.24 |
Spring , FactoryBean . 스프링 컨테이너 (0) | 2024.09.23 |