Spring getBean方法返回的那些bean来自哪里?

时间:2014-12-08 07:34:27

标签: java spring dependency-injection aop

请列出getBean的所有可能来源?

BTW,如果我只是写context.getBean(SomeInterface.class),我可以获得接口类的实现吗?

2 个答案:

答案 0 :(得分:1)

它们来自Spring应用程序上下文(这就是你所谓的getBean方法)。

Spring有一个应用程序上下文的概念,它是一个包含诸如Spring管理的所有bean之类的东西的对象。

您可以通过在Spring XML配置文件中配置bean或者通过注释@Component@Service等注释类来将bean放入应用程序上下文中,然后让Spring通过扫描包来找到它们那些课程。

如果你编写context.getBean(SomeInterface.class)并且有一个实现该接口的Spring bean,那么该方法调用将返回实现该接口的bean。

这些是Spring框架的基本概念。有关其工作原理的详细说明,请参阅Spring文档中的chapter 5, The IoC Container

答案 1 :(得分:0)

如果你进入ApplicationContext类层次结构,你会发现所有spring Application Context文件都是org.springframework.core.io.DefaultResourceLoader类的子文件。

DefaultResourceLoader的作用是获取当前线程上下文类加载器(如果没有提供)。所以我们可以理解所有应用程序上下文文件首先加载定义的类。 Application Context加载xml文件中定义的所有bean,使用@Bean批注或其他可用的spring注释进行标记。一旦上下文扫描注释和/或xml并加载类加载器中的所有bean。上下文首先创建依赖项并将它们注入依赖项。

要获取context.getBean(SomeInterface.class),请参阅以下文档。

http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/context/support/AbstractApplicationContext.html#getBean(java.lang.Class)

根据我对文档的理解,如果确定了一个实现bean类,你将得到bean。