스프링
수동 빈 등록, 수동 빈 주입
blogOwner
2024. 7. 31. 22:39
1. 수동 빈 등록, 수동 빈 주입
1) 수동 빈 등록
@Configuration
public class AppConfig{
@Bean
public B KKK (){
return new B();
}
}
- @Configuration 애노테이션을 붙이면, 서버 실행시 객체로 생성해서 내부 코드를 모두 수행해줍니다. 설정용 클래스임을 나타내주는 애노테이션이라고 생각하면 됩니다.
- @Bean 애노테이션을 붙여서 스프링컨테이너에 수동으로 빈으로 등록해줍니다.
- 빈 이름은 메서드의 이름(KKK)이 됩니다. 빈 객체는 메서드의 리턴값(new B()) 이 됩니다.
- 참고) 빈 이름이 중복되는 경우 발생하는 예외는 “ConflictingBeanDefinitionException” 라는 예외입니다.
2) 수동 빈 주입
- getBean(빈 이름, 클래스 또는 인터페이스)
- 첫번째 파라미터로는 가져오고자 하는 빈의 이름을 써줍니다.
- 두번째 파라미터로 클래스가 왔다면, 스프링 컨테이너 안에 있는 빈들 중 해당 클래스타입으로 만든 빈 객체가 가져와집니다.
- 두번째 파라미터로 인터페이스가 왔다면, 스프링 컨테이너 안에 있는 빈들 중 해당 인터페이스를 구현한 클래스로 만든 빈 객체가 가져와집니다.
- 첫번째 파라미터만 써서 빈이름으로만 조회할 수도 있고, 두번째 파라미터만 써서 해당 클래스나 인터페이스 타입의 빈을 조회할 수도 있습니다.
- 예시)
@Configuration
public class AppConfig{
@Bean
public B KKK (){
return new B();
}
}
-------------------------------------------------------------------------
public mainMethodImpl () {
public static void main(String[] args) {
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
// 빈 이름으로만 조회
A a = ac.getBean("KKK");
// 타입으로만 조회
A a = ac.getBean(B.class);
// 빈 이름과 타입으로 조회
A a = ac.getBean("KKK",A.class);
}
}