2011-07-05 5 views
1

내가 SpringData's Neo4j graph DB hello-worlds example 함께 일하고 내가 WorldRepositoriesImpl.java ...Spring의 @Autowired는 구현이없는 인터페이스를 어떻게 사용합니까?

@Autowired private WorldRepository worldRepository; 

또한 다음 코드 가로 질러, WorldRepository이 ...

public interface WorldRepository extends MyWorldRepository, 
             GraphRepository<World>, 
             NamedIndexRepository<World> 
{/* no method defined here */} 

이제 홀수 부분으로 정의된다 없음 실제로 찾을 수있는 클래스는 WorldRepository 낭포, 몇 가지 질문을 구현 ...

어떻게 이런 일이 가능할까요? 이 문서는 어디에 문서화되어 있습니까? 좀 더 명시 적으로 (덜 신비하게) 만들 수있는 방법이 있습니까?

답변

3

디버거가 부착 된 코드를 실행하면 Spring에 의해 연결된 worldRepository 인스턴스가 런타임에 생성 된 프록시 개체라는 것을 알 수 있습니다.

포함 된 pom.xml과 종속성을 살펴보면, 런타임시이 구현 클래스를 생성하는 일부 aspect에서 spring-neo4j 라이브러리 번들처럼 보입니다.

즉, 소스 코드에 선언 된 인터페이스의 구현은 없지만 런타임시 AspectJ 및 기타 도구를 사용하여 작성된 인터페이스는 없습니다.

IntelliJ screenshot of debugger

+0

"무엇이 일어나고있는가?" 그것은 여전히 ​​나에게 마술처럼 보입니다. 그리고 저는 그것이 세 개의 분리 된 인터페이스 (클래스 중 하나가 정의 됨)로부터 클래스를 어떻게 단편적으로 구성하는지 보지 못합니다. 이상적으로 나는 아직 발견하지 못했던 이것을 설명하는 문서를보고 싶습니다. 그리고 이것을 좀 더 명확하게하는 방법을 원합니다. –

+0

오히려 마술입니다. 핵심은 코드 합성을 수행하고 있다는 것입니다 (아마도 존재하는 다른 클래스/bean/메소드에 위임함으로써). –

+0

@Andrew,'NodeGraphRepository'와'org.springframework.data.graph.neo4j.support.relationship.Neo4jRelationshipBacking'을 살펴보면, 그들은 대부분의 작업을하고있는 것처럼 보입니다. 그 이외에, 당신이 거기에서 유용한 것을 찾을 수 없다면 당신은 도서관의 저자에게 그들의 문서를 개선시켜야 할 것이라고 생각합니다. –

관련 문제