2012-09-29 2 views
0

bean로드 순서는 종속성 및 전이 종속성에 의해 암시 적으로 결정된다는 사실을 알고 있습니다.명시 적 구성없이 처리 순서를 뒤 따르는 bean 변경

다른 AwareBeans 세트에 적용하려는 일종의 메타 데이터를 제공하는 주석 된 bean 세트가 있다고 가정 해보십시오. 따라서 N bean에서 모든 메타 데이터를 수집 한 후에 만 ​​AwareBeans를 게시 할 수 있습니다. 일반적으로 이런 종류의 콘텐츠에는 org.springframework.beans.factory.config.BeanPostProcessor을 사용합니다. 주문을 어떻게 처리할까요? 나는 심지어 depends-on을 설정하는 것이 명시 적으로 의존성에 우선 순위를 두지 않는다고 생각한다.

적용되는 beanPostProcessors의 순서 만 결정하지만 bean의 순서는 결정하지 않는 인터페이스 org.springframework.core.Ordered이 있습니다.

org.springframework.beans.factory.config.BeanFactoryPostProcessor을 사용할 수 있지만 bean 정의가 bean 인스턴스화 전에 정보가 충분하지 않습니다. 예를 들어 beanDef.getBeanClass()은 빈 클래스 이름 등을 반환합니다.

내가 원하는 것을 어떻게 수행 할 수 있는지 다른 방법으로 생각할 수 있습니까? 당신이 할 수있는

답변

0

org.springframework.beans.factory.config.BeanFactoryPostProcessor을 사용하고 클래스 로더로 클래스를로드하여 Reflection을 사용하여 주석을 가져올 수 있도록 해결했습니다. 나중에 스프링이 bean 클래스를 클래스 로딩 할 때 클래스 로더가 클래스가 이미로드되어 있는지 검사하고로드 된 경우 클래스를로드하지 않기 때문에 아무 것도 해독해서는 안된다고 생각합니다. 그렇지 않으면로드합니다.

0

:

a)받은 BeanPostProcessor의 모든 메타 데이터 콩을 주입한다.

b) 시작시 응용 프로그램 컨텍스트에서 모든 메타 데이터 bean을 적극적으로 가져옵니다.

각 방법마다 장단점이 있지만 효과는 동일합니다. BeanPostProcessor 이후에 모든 메타 데이터 bean이 이미 사후 구축됩니다.

+0

의도적으로 "명시 적 구성"을 언급하지 않았습니다. 다른 단어를 의미합니다. "제 3 자에 의해 사용될 라이브러리를 수행하고 있습니다"는 a) 유용하지 않습니다 ... b)와 관련하여 bean 의존성의 존재로 인해 이해가된다. – lisak