使用@Bean注解


@Bean是方法级注解,您可以在@Configuration注解的类或@Component注解 的类中使用@Bean注解。

​ 要声明 bean,可以使用@Bean注解 对方法进行 注解。您可以使用此方法在指定为该方法的返回值的类型的ApplicationContext内注册 bean 定义。默认情况下,Bean 名称与方法名称相同。

​ bean 名称以小写字母开头,并从那里用驼峰式大小写。这样的名称的示例包括accountManager,accountService,userDao,loginController等。

以下示例显示了使用@Bean注解的方法声明:

1
2
3
4
5
6
7
8
@Configuration
public class AppConfig {

@Bean
public TransferServiceImpl transferService() {
return new TransferServiceImpl();
}
}

前面的配置与下面的 Spring 的XML文件相关配置完全等效:

1
2
3
<beans>
<bean id="transferService" class="com.acme.TransferServiceImpl"/>
</beans>

即:transferService -> com.acme.TransferServiceImpl

​ 这两个声明使一个名为transferService的 bean 在ApplicationContext中可用,并绑定到TransferServiceImpl类型的对象实例

自定义 Bean 命名

​ 默认情况下,配置类使用@Bean方法的名称作为结果 bean 的名称。但是,可以使用name属性覆盖此功能,如以下示例所示:

1
2
3
4
5
6
7
8
@Configuration
public class AppConfig {

@Bean(name = "myThing")
public Thing thing() {
return new Thing();
}
}

​ 有时希望为单个 bean 提供多个名称,否则称为 bean 别名。 @Bean注解的name属性为此目的接受一个 String 数组。以下示例说明如何为 bean 设置多个别名:

1
2
3
4
5
6
7
8
@Configuration
public class AppConfig {

@Bean({"dataSource", "subsystemA-dataSource", "subsystemB-dataSource"})
public DataSource dataSource() {
// instantiate, configure and return DataSource bean...
}
}