2 Ocak 2023 Pazartesi

HazelcastSpring SpringManagedContext Sınıfı

Giriş
Şu satırı dahil ederiz
import com.hazelcast.spring.context.SpringManagedContext;
Spring bean'lerine erişim içindir

Kullanım
1. Bir tane SpringManagedContext bean yaratılır
2. Bir tane Hazelcast Config sınıfından bean yaratılır
SpringManagedContext bean Config nesnesine setManagedContext() metodu ile atanır
3. Hazelcast kaynaklarına erişen sınıfı @SpringAware ile işaretlerim. Bu anotasyon bir Spring Bean tanımlamanın Hazelcast yöntemi. Eğer bu anotasyonu kullanmak istemiyorsam sanırım Spring'in ApplicationContextAware arayüzünden kalıtmak lazım

setApplicationContext metodu
Kod şöyle. Yani Spring'in ApplicationContextAware arayüzünden kalıtım olduğu için setApplicationContext() metodu ile Spring'in ApplicationContext nesnesine erişim sağlanır.
import com.hazelcast.core.ManagedContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringManagedContext implements ManagedContext, ApplicationContextAware {

  private AutowireCapableBeanFactory beanFactory;
  ...
  @Override
  public void setApplicationContext(ApplicationContext applicationContext) 
  throws BeansException {
    this.beanFactory = applicationContext.getAutowireCapableBeanFactory();
  }
}
Örnek
Şöyle yaparız. Burada SpringManagedContext diye bir bean yaratıyoruz ve onu Config sınıfına atıyoruz. MyBatchSource sınıfı da ApplicationContextAware kalıtımı yapıyor ve bir bean oluyor. Dolayısıyla setApplicationContext() metodu lazım ama esas konu bu değil. 

MyBatchSource constructor içinde ManagedContext nesnesi geliyor. Bu nesne SpringManagedContext'e cast ediliyor. ve SpringManagedContext.init() çağrılıyor. SpringManagedContext.init() metodu da AutowireCapableBeanFactory ile bu nesnedeki tüm @Autowired anotayonlarını dolduruyor.
@Bean
public SpringManagedContext managedContext() {
  return new SpringManagedContext();
}
    
@Bean
public Config config(ManagedContext managedContext) {
  Config config = new Config();
  config.setManagedContext(managedContext);
}

@SpringAware
class MyBatchSource implements ApplicationContextAware {
  private ApplicationContext applicationContext;
        
  MyBatchSource(ManagedContext managedContext) {
    if (managedContext instanceof SpringManagedContext) {
      SpringManagedContext springManagedContext = (SpringManagedContext) managedContext;
      springManagedContext.initialize(this);
    }
  }
        
  void fillBufferFn() {
    Config config = this.applicationContext.getBean(Config.class);
    ...
  }

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) 
    throws BeansException {

    this.applicationContext = applicationContext;
  }
}

Hiç yorum yok:

Yorum Gönder

THIRD-PARTY.txt Dosyası

Kullanılan harici kütüphanelerin sürümleri bu dosyada Dosyanın yolu şöyle hazelcast/licenses/THIRD-PARTY.txt