2010-03-04 3 views
1

서브 클래스에 @Component 주석을 명시 적으로 포함하지 않으면 서비스의 @Resource 주석이 서브 클래스를 삽입하지 않습니다. 각 하위 클래스에서 주석을 요구하지 않고 하위 클래스를 부모 @Resource와 "유선"으로 요청할 수있는 방법이 있습니까? 내가 발견 한 방법은 하위 클래스를 만들고 @Component 주석을 포함하지 않는 것입니다. 나는 두려운 NPE에 빨리 직면했다.@Resource 주석이 서브 클래스를 삽입하지 않습니다.

답변

1

@Component annotation은 선언 된 클래스에서만 작동하며 성능상의 이유로 인해 하위 클래스는 작동하지 않습니다. 그렇지 않으면 스캔 할 각 클래스에 대해 모든 조상을 순회해야합니다.

해결 방법으로

, 당신은 <context:component-scan>에 부모 클래스에 대한 assignable 필터를 선언 할 수

<context:component-scan base-package = "..."> 
    <context:include-filter type = "assignable" expression = "... your parent class ..." /> 
</context:component-scan> 
+0

감사 형제! 부모 클래스의 자손을 의미한다고 가정합니까? 또한이 필터에는 @Component로 주석 처리되지 않은 하위 클래스가있을 수있는 모든 클래스를 지정해야합니까? 주석을 추가하는 것보다 어색하고 어려울 것입니다! 지금 컨텍스트에 대해 읽을 좋은 시간이라고 생각합니다 : include-filter. – stanlick

+0

@stanlick : 원하는 동작을 얻으려면 Spring이 각 클래스의 모든 조상을 @Component 주석으로 검색하거나 @Component-annotated 클래스의 모든 자손을 트래버스해야 함을 의미합니다. 두 경우 모두 시동 속도가 떨어집니다. 그리고 네, 각 자식 클래스에서'@ Component'를 제외하고는 다른 방법을 볼 수 없기 때문에 각 부모 클래스에 대해 별도의 필터 선언을 의미했습니다. – axtavt

+0

위대한 설명! 예, (중복) @Component를 추가하면 하위 클래스에 적절한 주입이 발생하지만 조금 어리석은 것처럼 보입니다. 나에게 그것은 "이중"구성과 같습니다. Foo가 Bar와 Bar를 확장하면, Foo는 Foo Being-A Bar의 결과이기도합니다. – stanlick

관련 문제