对于最新稳定版本,请使用Spring Framework 7.0.1spring-doc.cadn.net.cn

基本概念:@Bean@Configuration

Spring Java 配置支持的核心工件有@Configuration- 注释类和@Bean-注释方法。spring-doc.cadn.net.cn

@Bean注释用于表示方法实例化、配置和初始化一个新的对象,由 Spring IoC 容器管理。对于熟悉的人Spring 的<豆子/>XML 配置,以及@Bean注释的作用与 这<豆/>元素。 你可以使用@Bean- 带注释的方法,任意Spring@Component. 然而,它们最常被用于@Configuration豆。spring-doc.cadn.net.cn

注释类@Configuration表明其主要目的是作为Beans定义的来源。 此外@Configuration类允许 bean 间依赖关系通过调用其他@Bean同类方法。最简单的@Configuration课程内容如下:spring-doc.cadn.net.cn

@Configuration
public class AppConfig {

	@Bean
	public MyServiceImpl myService() {
		return new MyServiceImpl();
	}
}
@Configuration
class AppConfig {

	@Bean
	fun myService(): MyServiceImpl {
		return MyServiceImpl()
	}
}

前述AppConfig班级相当于下一个春季<豆子/>XML:spring-doc.cadn.net.cn

<beans>
	<bean id="myService" class="com.acme.services.MyServiceImpl"/>
</beans>
全@Configuration模式与“轻量”@Bean模式?

什么时候@Bean方法声明在未被注释的类中@Configuration,它们被称为以“轻量”模式处理。豆子方法在@Component甚至在普通的类别中,都被视为“轻型”,包含类别的主要目的不同且@Bean方法 这是一种额外的好处。例如,服务组件可能会通过额外的方式向容器暴露管理视图给容器@Bean对每个适用组件类别进行方法。在这种情况下,@Bean方法是一种通用的工厂方法机制。spring-doc.cadn.net.cn

不像全套@Configuration建兴@Bean方法不能声明豆间依赖关系。相反,它们作其包含组件的内部状态,并且可选地作它们可以声明的参数。这样的@Bean因此,该方法不应调用其他@Bean方法。 每个此类方法实际上只是特定豆引用的工厂方法,没有任何特殊的运行时语义。这里的积极副作用是运行时无需应用 CGLIB 子类,因此在类设计的术语中没有限制(即包含的类可以是最后等等)。spring-doc.cadn.net.cn

在常见场景中,@Bean方法应在@Configuration类 确保始终使用“完整”模式,并且跨方法引用因此被重定向到容器的生命周期管理系统。这样可以防止同样的情况发生@Bean防止在常规Java调用中意外被调用,这有助于减少在“轻量”模式下难以追踪的细微错误。spring-doc.cadn.net.cn

@Bean@Configuration注释将在后续章节中详细讨论。不过,首先,我们介绍了通过使用基于 Java 的配置来创建 Spring 容器的各种方法。spring-doc.cadn.net.cn