2011-03-21 3 views
0

저는 수천 개의 pojos를 포함하고있는 기존 프로젝트에 Spring 프레임 워크를 통합하려고합니다.
XML 구성 파일을 작성하거나 각 파일을 검토하고 클래스에 주석을다는 것은 힘든 작업입니다. 따라서 스프링 스캔 패키지를 만들고 이름 규칙에만 기반하여 빈을 식별 할 수있는 방법이 있습니까?xml이나 주석을 사용하지 않고 스프링 식별 빈을 어떻게 만들 수 있습니까?

+0

' '을 사용하는 것이 잘못된 이유는 무엇입니까? 그게 당신이 필요로하는 일을하는 것처럼 들리네. – skaffman

+0

@skaffman : 문제는 기존 코드를 수정하고 싶지 않기 때문에 사용한다면 @component 또는 특수 주석 중 하나에 배선해야하는 모든 클래스에 수동으로 주석을 추가해야합니다. – Mehdi

+0

그래서 콩을 식별하고 싶습니까? 예를 들어 줄 수 있습니까? – skaffman

답변

4

@Component- 스캔 동작은 <context:component-scan>입니다. 이름 기반 필터를 사용하여 동작을 사용자 정의 할 수 있습니다. 예제 section 3.10.3 of the manual를 참조하십시오

<beans> 

    <context:component-scan base-package="org.example"> 
     <context:include-filter type="regex" expression=".*Stub.*Repository"/> 
     <context:exclude-filter type="annotation" 
           expression="org.springframework.stereotype.Repository"/> 
    </context:component-scan> 

</beans> 

그래서 당신이 클래스의 명명 규칙에 의해 당신의 bean을 감지 할 수 있습니다.

+0

+1, didn 그걸 모르겠다. – Bozho

+1

@Bozho : 나도 그랬어. :) – skaffman

0

세 번째 옵션은 @Configuration 및 @Bean Annotation을 사용하고 Java-based container configuration을 사용하는 것입니다. 그러나 당신은 당신의 의존성을 연결하고 빈을 만드는 코드를 작성하고 있습니다.

+0

감사합니다. 매우 흥미로운 옵션 인 것 같습니다. – Mehdi

0

자신에게 질문해야 할 첫 번째 질문은 모든 콩을 연결하는 것이 정말로 필요한가요? 시스템의 모든 객체 중에서 구성 가능한 유일한 하위 세트와 다른 유선 bean에 종속 된 하위 세트 만 실제로 연결해야합니다.

+0

당신 말이 맞아요.하지만 유선 연결이 필요한 콩이 무엇인지 알아 내서 번호를 좁히더라도 번호는 여전히 거대합니다 (엔터프라이즈 응용 프로그램을 다루고 있습니다) – Mehdi

0

Bozho와 동의하십시오.

임시 해결 방법이 있습니다. 자신의 사용자 정의 BeanFactoryPostProcessor을 정의 할 수 있습니다. 여기서 명명 규칙에 따라 기존 프로젝트의 클래스를 검색하고 기존 프로젝트의 클래스에 BeanDefinition을 등록 할 수 있습니다.

예, 코딩이 필요하며 상자에서 꺼내는 것이 아닙니다.

관련 문제