복붙노트

[SPRING] 봄 : 특정 인터페이스 및 유형의 모든 콩을 얻을

SPRING

봄 : 특정 인터페이스 및 유형의 모든 콩을 얻을

내 봄 부팅 응용 프로그램에서 나는 자바 인터페이스를 가지고 가정 :

public interface MyFilter<E extends SomeDataInterface> 

(좋은 예는 봄의 공용 인터페이스 만약 ApplicationListener는 입니다)

그리고 내가 좋아하는 구현의 몇 가지있다 :

@Component
public class DesignatedFilter1 implements MyFilter<SpecificDataInterface>{...}

@Component
public class DesignatedFilter2 implements MyFilter<SpecificDataInterface>{...}

@Component
public class DesignatedFilter3 implements MyFilter<AnotherSpecificDataInterface>{...}

그리고, 어떤 객체에 나는 MyFilter를 구현하는 모든 필터를 활용하는 관심이 하지만 MyFilter

이 구문은 무엇을 할 것인가?

해결법

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

    1.다음은 목록에 일반적인 인수로 SpecificDataInterface를 확장하는 유형이 모든 MyFilter 인스턴스를 주입 할 것이다.

    다음은 목록에 일반적인 인수로 SpecificDataInterface를 확장하는 유형이 모든 MyFilter 인스턴스를 주입 할 것이다.

    @Autowired
    private List<MyFilter<? extends SpecificDataInterface>> list;
    
  2. ==============================

    2.당신은 간단하게 사용할 수 있습니다

    당신은 간단하게 사용할 수 있습니다

    @Autowired
    private List<MyFilter<SpecificDataInterface>> filters;
    
  3. ==============================

    3.경우 당신은 코드 아래의지도가 작동합니다. 열쇠는 당신의 정의 방법이다

    경우 당신은 코드 아래의지도가 작동합니다. 열쇠는 당신의 정의 방법이다

    private Map<String, MyFilter> factory = new HashMap<>();
    
    @Autowired
    public ReportFactory(ListableBeanFactory beanFactory) {
      Collection<MyFilter> interfaces = beanFactory.getBeansOfType(MyFilter.class).values();
      interfaces.forEach(filter -> factory.put(filter.getId(), filter));
    }
    
  4. from https://stackoverflow.com/questions/40286047/spring-get-all-beans-of-certain-interface-and-type by cc-by-sa and MIT license