1. 개요
이 빠른 사용방법(예제)에서는 Spring Framework의 BeanNameAware 및 BeanFactoryAware 인터페이스 에 중점을 둘 것 입니다.
각 인터페이스를 사용법의 장단점과 별도로 설명하겠습니다.
2. 인식 인터페이스
BeanNameAware 와 BeanFactoryAware 는 모두 org.springframework.beans.factory.Aware 루트 마커 인터페이스 에 속합니다 . 이것은 응용 프로그램 컨텍스트 시작 중에 개체를 가져오기 위해 setter 주입을 사용합니다.
Aware 인터페이스는 콜백, 리스너 및 옵저버 디자인 패턴이 혼합되어 있습니다 . Bean이 콜백 메소드를 통해 Spring 컨테이너에서 알림을 받을 수 있음을 나타냅니다.
3. BeanNameAware
BeanNameAware 는 객체가 컨테이너에 정의된 빈 이름을 인식하게 합니다 .
예를 살펴보겠습니다.
public class MyBeanName implements BeanNameAware {
@Override
public void setBeanName(String beanName) {
System.out.println(beanName);
}
}
beanName 속성 은 Spring 컨테이너에 등록된 bean id를 나타낸다. 우리의 구현에서는 단순히 빈 이름을 표시합니다.
다음으로 이 유형의 빈을 Spring 구성 클래스에 등록해 보겠습니다.
@Configuration
public class Config {
@Bean(name = "myCustomBeanName")
public MyBeanName getMyBeanName() {
return new MyBeanName();
}
}
여기 에서 @Bean(name = "myCustomBeanName") 행 을 사용하여 MyBeanName 클래스 에 이름을 명시적으로 할당했습니다.
이제 애플리케이션 컨텍스트를 시작하고 빈을 가져올 수 있습니다.
AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext(Config.class);
MyBeanName myBeanName = context.getBean(MyBeanName.class);
예상대로 setBeanName 메소드는 "myCustomBeanName" 을 출력합니다 .
컨테이너에서 @Bean 어노테이션 에서 name = "..." 코드를 제거하면 이 경우 getMyBeanName() 메소드 이름을 Bean에 할당합니다. 따라서 출력은 "getMyBeanName" 입니다.
4. BeanFactoryAware
BeanFactoryAware 는 BeanFactory 객체 를 주입하는 데 사용됩니다 . 이런 식으로 객체를 생성한 BeanFactory 에 액세스할 수 있습니다
다음은 MyBeanFactory 클래스의 예입니다.
public class MyBeanFactory implements BeanFactoryAware {
private BeanFactory beanFactory;
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
public void getMyBeanName() {
MyBeanName myBeanName = beanFactory.getBean(MyBeanName.class);
System.out.println(beanFactory.isSingleton("myCustomBeanName"));
}
}
setBeanFactory() 메소드 의 도움으로 IoC 컨테이너에서 beanFactory 속성 으로 BeanFactory 참조를 할당합니다 .
그런 다음 getMyBeanName() 함수 에서와 같이 직접 사용할 수 있습니다 .
MyBeanFactory를 초기화하고 getMyBeanName () 메소드 를 호출 합시다 :
MyBeanFactory myBeanFactory = context.getBean(MyBeanFactory.class);
myBeanFactory.getMyBeanName();
이전 예제에서 MyBeanName 클래스를 이미 인스턴스화 했으므로 Spring은 여기에서 기존 인스턴스를 호출합니다.
beanFactory.isSingleton("myCustomBeanName") 행 이 이를 확인합니다.
5. 언제 사용합니까?
BeanNameAware 의 일반적인 사용 사례는 로깅 또는 연결 목적으로 빈 이름을 얻는 것일 수 있습니다. BeanFactoryAware 의 경우 레거시 코드에서 스프링 빈을 사용하는 기능일 수 있습니다.
대부분의 경우 필요하지 않는 한 Aware 인터페이스를 사용하지 않아야 합니다. 이러한 인터페이스를 구현하면 코드가 Spring 프레임워크에 연결됩니다.
6. 결론
이 글에서 우리는 BeanNameAware 및 BeanFactoryAware 인터페이스와 실제로 사용하는 방법에 대해 배웠습니다 .
평소와 같이 이 기사의 전체 코드는 GitHub 에서 사용할 수 있습니다 .