metadata:元数据
Spring configuration metadata则是告知Spring容器:
- 如何初始化,配置,包裹,和组合应用内特定的对象。
Spring从2002年发布第一版到至今最新版,提供了三种方式去进行应用配置:
- XML-based Configuration: 所有的配置信息存放于多个XML文件中,这也是最冗长繁琐的配置方式。超大型项目们,需要配置超大量的XML文件。想象下就可知道有多难以管理吧?
- Annotation-based Configuration:Spring 2.5 开始引入基于注解的配置方式,我们仍然需要写XML文件,但现在只需要告知Spring去"component-scan"注解类所在的package即可。
- Java-based configuration (JavaConfig): 从3.0开始,Spring提供一种纯Java代码的配置方式。我们不再需要写大量的XML文件了。JavaConfig方式为依赖注入提供了一种真正的面向对象机制,意味着我们可以在配置代码中充分地使用Java语言的可重用性,继承性和多态性。开发者完全掌控了应用中bean的初始化和各项依赖注入的关系等等。
在这篇文章中我们只关注如JavaConfig。熟识其中一种方式已经足够去理解Spring容器的关键特性了。
无论我们使用哪种方式,如上图所示,我们只需要在三处地方使用configuration metadata:
- Injection Points:这是各项依赖关系必须被注入的地方。注入点一般都是bean Class中的fields/setters/constructors. Spring在bean loading阶段中把相应的对象实例注入到注入点中。
- Service Providers:这是各项Service的具体实现类,他们的实例对象会被注入到各个bean的Injection Points中。这些Service Providers类本身会在Spring Container中被初始化,并被登记注册为Spring beans,而且他们自身也可以拥有注入点。
- The Configuration:这里是被
@Configuration
注解的Java类。同时也是我们定义依赖关系的地方。