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. 결론

이 글에서 우리는 BeanNameAwareBeanFactoryAware 인터페이스와 실제로 사용하는 방법에 대해 배웠습니다 .

평소와 같이 이 기사의 전체 코드는 GitHub 에서 사용할 수 있습니다 .

Generic footer banner