2012-02-04 8 views
8

내가 정말로 원하는 것을 설명하는 것은 어렵습니다. 클래스의 변수에 대한 모든 런타임 디버그 정보를 제공하는 메서드 getRuntimeInfo()이있는 인터페이스가 있습니다. 이 인터페이스를 구현하는 모든 클래스 목록을보고 싶습니다. 자바와 스프링을 사용하고 있습니다. 이렇게 할 수있는 한 가지 방법은 스프링 컨텍스트에서 모든 빈을 가져와 instanceof 연산자를 사용하여 확인하는 것입니다. 그러나 명백한 성능 영향을 미치기를 원하지는 않을 것입니다. 다른 옵션이 있습니까?특정 인터페이스를 구현하는 모든 클래스를 추적합니다.

답변

13

무엇 :

@Component 
public class WithAllMyInterfaceImpls { 

    @Autowire 
    List<MyInterface> allBeansThatImplementTheMyInterface; 

} 

리스트은() 시작에 한번 채워집니다 그래서 "정상적인"런타임 성능에 큰 영향을주지해야한다.


의견 :

당신은 당신은 봄이 IOC 컨테이너 알고 코드

설명 할 수있다. @Component은 Spring에게이 클래스의 인스턴스를 생성해야한다고 알려줍니다 (소위 스프링 관리 Bey). IOC은 Container가 다른 인스턴스 (Spring Managed Beans)에 대한 참조를 삽입 할 책임이 있다는 것을 의미합니다. @Autowire (물론 @Resource@Inject은 모두 동일 함)은 Spring에게이 필드가 Spring에 의해 채워 져야한다는 것을 알려주는 주석입니다. Spring 자체는 필드가 채워 져야하는 인스턴스를 파악하려고 시도합니다. Spring이 사용하는 기본 기술은 by type입니다. 이는 Spring이 필드의 유형을 검사하고 일치하는 bean을 검색한다는 것을 의미합니다. 귀하의 경우 그것은 일반적인리스트입니다 - 이것은 약간 특별합니다. 이 경우 Spring은 필드를 목록으로 채 웁니다. 여기서 요소는 제네릭 유형과 일치하는 모든 bean입니다.

+0

정상적인 봄 autowiring 기능은 특별한 것이 없습니다. 그것은 핵심 스프링 기능입니다. – Ralph

+0

@ user1117398 : 약간 설명하기 위해 대답을 확장했습니다. - 당신이 봄 3.0을 읽어야하는 것처럼 보입니다 !!! 또는 3.1 튜토리얼. – Ralph

관련 문제