转载自: https://www.cnblogs.com/mark5/p/11752576.html
Spring的新Java配置支持中的中心工件是 @Configuration注释类和@Bean注释方法。
该@Bean注释被用于指示一个方法实例,配置和初始化为通过Spring IoC容器进行管理的新对象。对于那些熟悉Spring的<beans/>XML配置的人来说,@Bean注释与<bean/>元素扮演的角色相同。你可以@Bean在任何Spring中使用-annotated方法 @Component。但是,它们最常用于@Configuration类。
对类进行注释@Configuration表明其主要目的是作为bean定义的来源。此外,@Configuration类允许通过调用@Bean同一类中的其他方法来定义bean间依赖关系。最简单的@Configuration类如下:
上面的AppConfig类等效于以下Spring <beans/>XML:
完整@Configuration vs“lite”@Bean模式?
当@Bean在未注释的类中声明方法时 @Configuration,它们被称为以“精简”模式处理。在一个@Component或甚至在一个普通的旧类中声明的Bean方法被认为是“精简”,包含类的主要目的不同,并且@Bean方法在那里是一种奖励。例如,服务组件可以通过@Bean每个适用组件类的附加方法将管理视图公开给容器。在这种情况下,@Bean方法是通用的工厂方法机制。
与full不同@Configuration,lite @Bean方法不能声明bean间依赖关系。相反,它们对其包含组件的内部状态进行操作,并且可选地,对它们可以声明的参数进行操作。@Bean因此,这种方法不应该引用其他 @Bean方法。每个这样的方法实际上只是特定bean引用的工厂方法,没有任何特殊的运行时语义。这里的积极副作用是不必在运行时应用CGLIB子类,因此在类设计方面没有限制(也就是说,包含类可能是final等等)。
在常见的场景中,@Bean方法将在@Configuration类中声明,确保始终使用“完整”模式,并因此将交叉方法引用重定向到容器的生命周期管理。这可以防止@Bean通过常规Java调用意外地调用相同的 方法,这有助于减少在“精简”模式下操作时难以跟踪的细微错误。