web-dev-qa-db-fra.com

Est-il possible de définir un nom de bean à l'aide d'annotations dans Spring Framework?

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?

21
Alexandr

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();
    }

}
25