是否可以在Spring Framework中使用注释设置bean名称?

Ale*_*ndr 24 java spring spring-mvc spring-annotations spring-bean

我有这样的豆:

@Bean
public String myBean(){
    return "My bean";
}
Run Code Online (Sandbox Code Playgroud)

我想要自动装配它:

@Autowired
@Qualifier("myBean")
public void setMyBean(String myBean){
    this.myBean=myBean;
}
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西:

@Bean(name="myCustomBean")
Run Code Online (Sandbox Code Playgroud)

是否可以使用开箱即用的bean自定义名称?如果不可能开箱即可,那么如何创建这样的bean呢?

Sun*_*amy 30

您可以使用任何一个@Component注释来设置名称.这是官方文件.

@Configuration
public class AppConfig {

    @Bean(name = "myFoo")
    public Foo foo() {
        return new Foo();
    }

}
Run Code Online (Sandbox Code Playgroud)

这将创建一个bean,即myMovieLister,而不是simpleMovieLister.

对于JavaConfig,这适用于使用@Bean的示例.

2.2.6.自定义bean命名

默认情况下,JavaConfig使用@Bean方法的名称作为结果bean的名称.但是,可以使用BeanNamingStrategy扩展点覆盖此功能.

@Configuration
public class AppConfig {

    @Bean(name = "myFoo")
    public Foo foo() {
        return new Foo();
    }

}
Run Code Online (Sandbox Code Playgroud)

============================

更新:

你问的问题已经在Spring 4.3.3中提供了

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

@Configuration
public class AppConfig {

    @Bean(name = "myFoo")
    public Foo foo() {
        return new Foo();
    }

}
Run Code Online (Sandbox Code Playgroud)