webentwicklung-frage-antwort-db.com.de

Ist es möglich, einen Bean-Namen mithilfe von Annotationen in Spring Framework festzulegen?

Ich habe eine Bohne wie diese:

@Bean
public String myBean(){
    return "My bean";
}

Ich möchte es automatisch verdrahten lassen:

@Autowired
@Qualifier("myBean")
public void setMyBean(String myBean){
    this.myBean=myBean;
}

Ich brauche so etwas wie:

@Bean(name="myCustomBean")

Ist es möglich, benutzerdefinierte Namen für Beans zu verwenden? Wenn es nicht sofort möglich ist, wie erstellt man dann eine solche Bohne?

21
Alexandr

Sie können den Namen mithilfe einer beliebigen der @Component-Annotationen festlegen. Hier ist der offizielle doc.

@Service("myMovieLister")
public class SimpleMovieLister {
    // ...
}

Dadurch wird eine Bean erstellt, nämlich myMovieLister anstelle von simpleMovieLister.

Für JavaConfig Dies gilt für Ihr Beispiel, das @Bean verwendet .

2.2.6. Anpassen der Bean-Benennung

Standardmäßig verwendet JavaConfig den Namen einer @ Bean -Methode als Namen der resultierenden Bean. Diese Funktionalität kann jedoch mit dem Erweiterungspunkt BeanNamingStrategy überschrieben werden.

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

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

Update:

Was Sie fragen, ist bereits verfügbar im Frühjahr 4.3.

Standardmäßig verwenden Konfigurationsklassen den Namen einer @Bean-Methode als Namen der resultierenden Bean. Diese Funktionalität kann jedoch mit dem Attribut name überschrieben werden.

@Configuration
public class AppConfig {

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

}