1. @Bean:
1.1 定义
从定义可以看出,@Bean只能用于注解方法和注解的定义。
-
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
-
@Retention(RetentionPolicy.RUNTIME)
1.2 spring文档中对 @Bean的说明
用@Bean注解的方法:会实例化、配置并初始化一个新的对象,这个对象会由spring IoC 容器管理。
实例:
@Configuration
public class AppConfig {
@Bean
public MyService myService() {return new MyServiceImpl();}
}
相当于在 XML 文件中配置
<beans>
<bean id="myService" class="com.acme.services.MyServiceImpl"/>
</beans>
1.3 生成对象的名字:默认情况下用@Bean注解的方法名作为对象的名字。但是可以用 name属性定义对象的名字,而且还可以使用name为对象起多个名字。
@Configuration
public class AppConfig {
@Bean(name = "myFoo")
public Foo foo() {
return new Foo();
}}
@Configuration
public class AppConfig {
@Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" })
public DataSource dataSource() {
// instantiate, configure and return DataSource bean...
}}
1.4 @Bean 一般和 Configuration 一起使用。
2. @Configuration:
2.1 定义
从定义看,用于注解类、接口、枚举、注解的定义。
-
@Target(ElementType.TYPE)
-
@Retention(RetentionPolicy.RUNTIME)
2.2 spring 文档说明
@Configuration
用于类,表明这个类是beans定义的源。
在spring.factories中定义配置类与在类上加注解@Configuration效果等同
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.bolingcavalry.webdemo.config.MyConfig, \ com.bolingcavalry.webdemo.config.GoodConfig, \ com.bolingcavalry.webdemo.config.OtherConfig