저는 구성 요소 검색과 함께 XML 구성을 사용하여 Webapp에 Spring 3.1.3을 사용하고 있습니다.Spring에서 @DependsOn 주석을 무시한 이유는 무엇입니까?
스캔 한 구성 요소 중 하나를 여러 다른 구성 요소보다 먼저 초기화해야한다는 것을 알았습니다. post-construct 초기화가 필요한 모든 클래스에서 메소드에 @PostConstruct 주석이 있습니다.
종속성 순서를 설정하려면 다른 구성 요소보다 사후 구축해야하는 클래스에서 '@Component'를 '@Component ("configData")로 변경했습니다. 그런 다음 "configData"bean 이후에 사후 생성 될 필요가있는 각 클래스 정의 바로 앞에 '@DependsOn ("configData")를 추가했습니다.
내가 읽은 것으로부터 이것은 의존성 순서를 시행하는 데 필요한 모든 것입니다.
그런 다음 모든 것을 구현하고 중단 점을 설정 한 다음 앱을 시작했습니다. 나는 "configData"빈에서 중단 점에 도달하기를 기대했다. 이것은 일어난 것이 아닙니다. 첫 번째 중단 점은 종속 bean 중 하나의 "init"메소드에있었습니다.
"log4j.xml"을 "org.springframework"의 로깅 수준으로 설정하고 내 테스트를 다시 수행하도록 "debug4"를 변경했습니다. 브레이크 포인트 동작은 동일했고, 나의 로깅은 Spring 초기화에 대한 디버그 정보를 보여주지 못했다. (나는 log4j 초기화 자체에 대해 디버깅을했기 때문에 "org.springframework"에 대해 DEBUG를 설정했다.)
무엇이 누락 되었습니까?
업데이트 :이 중요한 경우
, 여기에 내가 여기서 뭘하는지의 골격 몇 가지 예이다.
@Component("configData")
public class ConfigData {
....
@PostConstruct
public void init() {
....
}
}
@Component
@DependsOn("configData")
public class ClassDependentOnConfigData extends BaseClass {
....
@Override
@PostConstruct
public void init() {
super.init();
....
}
}
은 내가 런타임에 발견하고있어 "ClassDependentOnConfigData"의 방법 "() 초기화"가 "를 configdata"에서 "() 초기화"방법 전에 Spring에 의해 호출되는 것입니다, 반복합니다.
"BaseClass"에는 "ConfigData"에 대해 "@Autowired"가 있습니다.
당신은 bean 정의를 configdata 빈의 (Java 및/또는 XML), 그리고 이후에 초기화되어야 빈을 게시 할 수 있습니다 예를 들어? –
좋아,하지만 이것들은 해골 일 뿐이며 내 설명에서 알 수있는 것은 분명합니다. –
스프링 디버그 메시지가 보이지 않는 경우 글로벌 THRESHOLD 세트가 없는지 확인 했습니까? 다른 말로하면 - 다른 DEBUG 메시지를 보시겠습니까? –