J'ai un haricot comme ça:
@Bean
public String myBean(){
return "My bean";
}
Je veux l'autowire:
@Autowired
@Qualifier("myBean")
public void setMyBean(String myBean){
this.myBean=myBean;
}
J'ai besoin de quelque chose comme:
@Bean(name="myCustomBean")
Est-il possible d'utiliser des noms de noms personnalisés pour les beans prêts à l'emploi? Si ce n'est pas possible, comment créer un tel haricot?
Vous pouvez définir le nom en utilisant n'importe laquelle des annotations @Component . Voici le officiel doc.
@Service("myMovieLister")
public class SimpleMovieLister {
// ...
}
Cela va créer un bean à savoir myMovieLister au lieu de simpleMovieLister.
Pour JavaConfig, Ceci s'applique à votre exemple qui utilise avec @Bean .
2.2.6. Personnalisation de la dénomination des haricots
Par défaut, JavaConfig utilise un nom de méthode @ Bean comme nom du bean résultant. Cette fonctionnalité peut toutefois être remplacée à l'aide du point d'extension BeanNamingStrategy .
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");
}
}
============================
Mise à jour:
Ce que vous demandez est déjà disponible au printemps 4.3.
Par défaut, les classes de configuration utilisent un nom de méthode @Bean comme nom du bean résultant. Cette fonctionnalité peut toutefois être remplacée par l'attribut name.
@Configuration
public class AppConfig {
@Bean(name = "myFoo")
public Foo foo() {
return new Foo();
}
}