7 Ağustos 2019 Çarşamba

SpringContext @Bean Anotasyonu

Giriş
Şu satırı dahil ederiz.
import org.springframework.context.annotation.Bean;
Metod Seviyesinde Kullanılır
Açıklaması şöyle
This annotation is used at the method level. The @Bean annotation works with @Configuration to create Spring beans.
@Autowired İle Farkı
Açıklaması şöyle. Yani @Bean bir producer, @Autowired ise consumer olarak düşünülebilir.
@Bean tells Spring 'here is an instance of this class, please keep hold of it and give it back to me when I ask'.
@Autowired says 'please give me an instance of this class, for example, one that I created with an @Bean annotation earlier'.
Bu anotasyon sayesinde kendi sınıfımza anotasyon eklemek zorunda kalmıyoruz. Eskiden şöyle yapardık.
@Component
public class MyClass{   
  public MyClass (){
    ...
  }
}
destroyMethod Alanı
Açıklaması şöyle. Çağrılmasını istediğimiz metodu belirtmek için @PreDestroy da kullanılabilir
In other words, if you don't specify destroyMethod, but the bean has a public close() or shutdown() method, it will be automatically used as the destroy-method
Örnek
Şöyle yaparız.
@Bean(initMethod="start",destroyMethod="stop")
public org.h2.tools.Server h2WebConsonleServer () throws SQLException {
  return org.h2.tools.Server.createWebServer("-web","-webAllowOthers","- 
  webDaemon","-webPort", "8082");
}
initMethod Alanı
Şöyle yaparız.
@Bean(initMethod = "doProvision")
public Provisioner provisioner() {
  return new Provisioner();
}
name Alanı
Belirtilen isme sahip bean yaratır. Bu bean'e kodun diğer yerlerinde @Autowired + @Qualifier ile erişilir.

Örnek
Şöyle yaparız.
@Configuration
@ComponentScan({"my.packages"})
public class AppManager {

  @Bean(name = "jmxExporter")
  public Exporter jmxExporter() {
    return new Exporter();
  }
}
Örnek
Aynı tipten farklı isime sahip 3 tane bean yaratmak için şöyle yaparız.
@Service("Service-A")
public class SampleService {
    public String doSomething() { return "Foo"; }
}

@Configuration
public class SampleConfig {

  @Bean(name = {"Service-B", "Service-C"})
  public SampleService createMirroredService(@Autowired SampleService service) {
    return service;
  }
}

Hiç yorum yok:

Yorum Gönder