15 Mart 2019 Cuma

SpringContext FactoryBean Arayüzü - Belirtilen Tipi Yaratır ve Bean Olarak Kullanabilmeyi Sağlar

Giriş 
Şu satırı dahil ederiz.
import org.springframework.beans.factory.FactoryBean;
Bu sınıfın döndürdüğü sınıf tipini @Component olarak işaretleyeme gerek yok. Spring bu işi bizim için yapıyor. Açıklaması şöyle.
The object created by the FactoryBean are managed by Spring, but not instantiated or configured by Spring.
Döndürdüğümüz nesne tipini @Autowire olarak kullanabiliriz.

FactoryBean Nedir?
Açıklaması şöyle. Yani belirtilen tipten bir nesne yaratır ve bu nesne bean kabul edilir. Dolayısıyla  @Autowired olarak inject edilebilir.
A FactoryBean is an interface that you, as a developer, implements when writing factory classes and you want the object created by the factory class to be managed as a bean by Spring...
getObject() metodu
Örnek
Şöyle yaparız. MessageDigest nesnesi artık @Autowired olarak kullanılabilir. Burada isSingleton() true dönüyor
public class MessageDigestFactoryBean implements FactoryBean<MessageDigest>{

    private String algorithmName = "MD5";
    private MessageDigest messageDigest = null;

  @Override
  public MessageDigest getObject() throws Exception {
    return messageDigest;
  }

  @Override
  public Class<?> getObjectType() {
    return MessageDigest.class;
  }

  @Override
  public boolean isSingleton() {
    return true;
  }

  @PostConstruct
  public void postConstructHandler() throws NoSuchAlgorithmException {
    messageDigest = MessageDigest.getInstance(algorithmName);
  }

  public void setAlgorithmName(String algorithmName) {
    this.algorithmName = algorithmName;
  }
}
getObjectType metodu
Şöyle yaparız.
ublic class SearcherFactory implements FactoryBean<Searcher> {

  @Override
  public Class<Searcher> getObjectType() {
    return Searcher.class;
  }
    .... 
}
isSingleton metodu
Bu metod true döndürürse getObjet() metodu bir kere çağrılır. Bu metod false döndürürse bean prototype kabul edilir ve getObject() metodu her seferinde çağrılır.
Örnek
Şöyle yaparız.
public boolean isSingleton() {
  return true;
}

Hiç yorum yok:

Yorum Gönder