是否可以在Spring Framework中使用注释设置bean名称?
我有这样一个bean:
@Bean public String myBean(){ return "My bean"; }
我想自动assembly它:
@Autowired @Qualifier("myBean") public void setMyBean(String myBean){ this.myBean=myBean; }
我需要这样的东西:
@Bean(name="myCustomBean")
是否可以使用开箱即用的bean自定义名称? 如果不可能开箱即可,那么如何创建这样的bean呢?
您可以使用任何一个@Component注释来设置名称。 这是官方文件。
@Service("myMovieLister") public class SimpleMovieLister { // ... }
这将创建一个bean,即myMovieLister,而不是simpleMovieLister。
对于JavaConfig,这适用于使用@Bean的示例 。
2.2.6。 自定义bean命名
默认情况下,JavaConfig使用@Bean方法的名称作为结果bean的名称。 但是,可以使用BeanNamingStrategy扩展点覆盖此function。
public class Main { public static void main(String[] args) { JavaConfigApplicationContext ctx = new JavaConfigApplicationContext(); ctx.setBeanNamingStrategy(new CustomBeanNamingStrategy()); ctx.addConfigClass(MyConfig.class); ctx.refresh(); ctx.getBean("customBeanName"); } }
============================
更新:
你问的问题已经在Spring 4.3.3中提供了
默认情况下,配置类使用@Bean方法的名称作为结果bean的名称。 但是,可以使用name属性覆盖此function。
@Configuration public class AppConfig { @Bean(name = "myFoo") public Foo foo() { return new Foo(); } }