복붙노트

[SPRING] 프로그래밍 방식으로 Bean 검색

SPRING

프로그래밍 방식으로 Bean 검색

@Configuration
public class MyConfig {
    @Bean(name = "myObj")
    public MyObj getMyObj() {
        return new MyObj();
    }
}

@Configuration Spring 주석이있는 MyConfig 객체가 있습니다. 내 질문은 프로그래밍 방식으로 (일반 클래스에서) Bean을 검색하는 방법입니다.

예를 들어 코드 스 니펫은 다음과 같습니다. 미리 감사드립니다.

public class Foo {
    public Foo(){
    // get MyObj bean here
    }
}

public class Var {
    public void varMethod(){
            Foo foo = new Foo();
    }
}

해결법

  1. ==============================

    1.여기 예

    여기 예

    public class MyFancyBean implements ApplicationContextAware {
    
      private ApplicationContext applicationContext;
    
      void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
      }
    
      public void businessMethod() {
        //use applicationContext somehow
      }
    
    }
    

    그러나 ApplicationContext에 직접 액세스 할 필요는 거의 없습니다. 일반적으로 한 번 시작하면 Bean이 자동으로 채워집니다.

    여기 있습니다 :

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    

    applicationContext.xml에 이미 포함 된 파일은 언급 할 필요가 없습니다. 이제 이름이나 유형으로 하나의 Bean을 간단히 가져올 수 있습니다.

    ctx.getBean("someName")
    

    ContextLoaderListener, @Configuration 클래스 등을 사용하여 Spring을 시작하는 많은 방법이 있습니다.

  2. ==============================

    2.이 시도:

    이 시도:

    public class Foo {
        public Foo(ApplicationContext context){
            context.getBean("myObj")
        }
    }
    
    public class Var {
        @Autowired
        ApplicationContext context;
        public void varMethod(){
                Foo foo = new Foo(context);
        }
    }
    
  3. ==============================

    3.ApplicationContext에서 Bean을 가져와야 할 경우 가장 간단한 방법은 아니지만 가장 간단한 방법은 클래스에 ApplicationContextAware 인터페이스를 구현하고 setApplicationContext () 메소드를 제공하는 것입니다.

    ApplicationContext에서 Bean을 가져와야 할 경우 가장 간단한 방법은 아니지만 가장 간단한 방법은 클래스에 ApplicationContextAware 인터페이스를 구현하고 setApplicationContext () 메소드를 제공하는 것입니다.

    ApplicationContext에 대한 참조가 있으면 Bean 인스턴스를 리턴하는 많은 메소드에 액세스 할 수 있습니다.

    단점은 클래스가 Spring 컨텍스트를 인식하게하여 필요하지 않은 경우 피해야한다는 것입니다.

  4. from https://stackoverflow.com/questions/25775888/retrieve-bean-programmatically by cc-by-sa and MIT license