2017-01-25 3 views
0

나는 여러 개의 stackoverflow 질문에서 applicationContext.getbean이 나쁜 아이디어라고 읽었습니다.주어진 유형의 스프링 빈을 얻는 최선의 방법

Why is Spring's ApplicationContext.getBean considered bad?

나는 봄에 지정된 유형의 콩을 스캔하는 더 나은 방법이 있는지 알고 싶습니다.

나의 유스 케이스는 봄 시작 중에 주어진 유형의 빈을 가져 와서 그 콩에 대한 몇 가지 메소드를 호출하는 것이다.

내가 아는 바로는이 작업을 수행하는 데는 두 가지 방법 만 있습니다.

  1. 스프링 빈으로 응용 프로그램 컨텍스트를 autowire하고 appContext.getBeansOfType을 사용하십시오.
  2. 후크 포스트 프로세서와 나는 단지 한 종류의 콩을 처리하는 포스트 프로세서에 후킹 느낌 (유형의 빈 인스턴스)

가 아닌 경우

에 의해 지정된 유형의 우리 콩을 필터링 좋은 생각. 왜냐하면 모든 bean 초기화를 가로 채기 때문입니다.

누구든지 내 유스 케이스를 해결하는 더 나은 방법을 제안 할 수 있습니까? (지정된 타입의 getBeans)

답변

1

스프링은 autowired 파라미터 인 List의 특수 처리를가집니다. 예를 들어 bean을 지정하면 같은 :

@Component 
class MyBean { 
    @Autowired 
    MyBean(List<MyType> listOfMytype) { 

    } 
} 

그런 다음 봄 유형 List<MyType>의 콩에 대한 귀하의 ApplicationContext를 검색하지 않습니다, 대신 그것은 MyType를 구현하고 목록 (which may suck if you actually want to get a list injected)와 같은 사람들을 주입 모든 콩을 검색합니다. 따라서 주어진 유형의 모든 콩을 얻습니다.

+0

답해 주셔서 감사합니다. 나는 한 가지 더 질문이있다. 이 경우 applicationContext.getBeansOfType을 사용할 때의 잘못된 점은 무엇입니까? 코드를 구체적인 클래스에 연결하지 않습니다. 우리는 그 클래스의 빈 목록을 autowiring하여 어쨌든 수행중인 추상 클래스 (또는 아마도 인터페이스)에 연결합니다. – yaswanth

+0

@yaswanth : 나는 당신이 링크 한 질문에 훨씬 더 적합하다고 생각합니다. 놀랍게도이 질문에서 기존 답변 중 어느 것도 효과를 볼 수있는 직접적인 예가 없습니다. 그래서 하나 추가 : http://stackoverflow.com/a/41853545/327301 – yankee

관련 문제