Spring的@Autowired如何使用没有实现的接口?

时间:2011-07-05 14:04:56

标签: java spring autowired spring-data

我正在使用SpringData's Neo4j graph DB hello-worlds example,我在WorldRepositoriesImpl.java中遇到了以下代码......

@Autowired private WorldRepository worldRepository;

此外,WorldRepository定义为......

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

现在奇怪的部分,我找不到的任何课程实际上都是WorldRepository。所以,有几个问题......

这怎么可能?这记录在哪里?有没有办法让这一点更明确(不那么神秘)?

1 个答案:

答案 0 :(得分:3)

运行附带调试器的代码表明Spring连接的worldRepository实例是在运行时创建的代理对象。

查看pom.xml和所包含的依赖项,它看起来像某些Aspects中的spring-neo4j库捆绑包,它们在运行时创建了这个实现类。

换句话说,源代码中没有声明此接口的实现 - 但是在运行时使用AspectJ和其他工具创建了一个。

IntelliJ screenshot of debugger