interface InitializingBean -> afterPropertiesSet()
빈 객체 생성, 의존성 주입, 초기화
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(TestConfigurer.class);
Menu menu = applicationContext.getBean("menu", Menu.class);
빈 조회
interface DisposableBean -> destroy()
빈 소멸
applicationContext.close();
InitializingBean(초기화), DisposableBean(소멸시점)을 구현 및 오버라이딩하여 적절한 타이밍에 특정 기능을 넣을 수 있다.
만약 기존 InitializingBean(), DisposableBean() 이름 대신 다른 이름을 쓰고 싶다면
iniMethod 속성과 destroyMethod 속성 값을 변경하는 방법
@Bean(initMethod = "대체이름", destroyMethod = "대체이름")
속성은 기본적으로 자동으로 추론되어 등록된다
@PostConstruct와 @PreDestory 애너테이션을 활용하는 방법
초기화 메서드에 @PostConstruct, 소멸 메서드에 @PreDestroy를 넣어 작동
빈 객체의 관리 범위
- 싱글톤
- 프로토타입(prototype)
- 세션(session)
- 리퀘스트(request)
@Scope("prototype")를 이용해 빈의 관리범위를 기본값인 싱글톤에서 프로토탑으로지정할 수 있다

테스트가 실패하며 주소값이 다르게 표시됨을 확인 할 수 있다
@Configuration과 @Bean을 사용한 수동 주입 방식에서
@Component과@Autowired을 사용해 자동으로 빈을 등록할 수 있게 해준다
따로 설정을 하지 않는다면 @ComponentScan이 붙은 클래스의 패키지가 스캔의 시작 위치가 된다. 스캔 대상이 패키지(해당 클래스 위치)를 최상단에 두도록 하자.
범위를 변경하고 싶다면 @ComponentScan(basePackages = “”)를 사용하면 된다.
스프링 컨테이너 객체 생성시 참조 클래스를
AppConfigurer 에서 TestConfigurer.class 로 변경
클래스 위에 @Component, 생성자 위에 @Autowired 입력
이 외에 스캔 타겟 지정 @Configuration, @Controller, @Service, @Repository
컨테이너 스캔영역 내에 가져올 스프링빈의 타입과 이름이 중복 될 경우 NoUniqueBeanDefinitionException 가 발생한다

@Autowired로 대상을 직접 지정시 오류가 표시된다
해결 방법
중복되는 타입의 필드명을 중복되지 않도록 수정해 준다

구분자 이름을 추가로 지정해 준다


우선적으로 사용하는 빈을 지정 해 준다(호출하는 스프링 빈 클래스에 설정)