6 Şubat 2020 Perşembe

SpringBoot CommandLineRunner Arayüzü

Giriş
Şu satırı dahil ederiz.
import org.springframework.boot.CommandLineRunner;
Spring içinde iki çeşit runner var
1. CommandLineRunner 
2. ApplicationRunner

Runner  Nedir?
Runner arayüzünü gerçekleştiren sınıf bean olmalıdır. Bu bean spring tarafından otomatik olarak tetiklenirler. Açıklaması şöyle
CommandLineRunners are ordinary beans with one exception:
After the application context is loaded, spring boot finds among all its beans the beans that implement this interface and calls their run method automatically.
Yani Sınıfın run() metodu tam SpringBoot uygulaması çalışmaya başlamadan önce tetiklenir. 

CommandLineRunner Nedir?
Spring 1.0'dan beri olan ve sadece run metoduna sahip olan Functional Interface

CommandLineRunner ve Ana Sınıfımızın İlişkisi Nedir
Genellikle @SpringBootApplication olarak işaretli ana sınıfımız bu arayüzden kalıtır ve run() metodunu gerçekleştirir.

Runner  Alternatifi Nedir?
Eğer bu sınıfı kullanmak istemezsek bir diğer seçenek ApplicationContext içinden bir bean seçerek onun run() metodunu çağırmak.

Runner Çalışma Sırası Nedir?
Açıklaması şöyle. Yani önce ApplicationRunner sınıflar alfabetik sıraya göre çağrılırlar, daha sonra CommandLineRunner sınıflar alfabetik sıraya göre çağrılırlar.
Spring Boot provides default execution order. i.e ApplicationRunner implemented classes will execute first based on alphabetical order(A-Z) after that CommandLineArgument implemented classes will be executed based on alphabetical order.
- Sırayı değiştirmek istersek Ordered arayüzünden kalıtırız veya @Ordered anotasyonu kullanırız.
- Verilen sayı ne kadar küçükse çalışma önceliği o kadar öncedir
- Eğer sınıf hem Ordered arayüzünden kalıtıyorsa, hem de @Ordered anotasyonuna sahipse, Ordered arayüzünün döndürdüğü değer kullanılır.

Örnek
Şöyle yaparız
@Component
public class CustomApplicationRunner implements ApplicationRunner, Ordered {

  @Override
  public void run(ApplicationArguments args) throws Exception {
    System.out.println("CustomApplicationRunner.run() arguments");
  }

  @Override
  public int getOrder() {
    return -15;
  }
}

@Component
@Order(-1)
public class AlertCommandLineRunner implements CommandLineRunner {

  @Override
  public void run(String... args) throws Exception {
    System.out.println("AlertCammandLineRunner.run() arguments");
  }
}

run metodu
Örnek
Şöyle yaparız
@Component
public class MyRunner implements CommandLineRunner {

  @Override
  public void run(String... args) throws Exception {
    // run method implementation
  }
}
Örnek
Bir Swing uygulaması için şöyle yaparız.
@SpringBootApplication
public class SpringDesktopSampleApplication implements CommandLineRunner {

  public static void main(String[] args) {
    new SpringApplicationBuilder(SpringDesktopSampleApplication.class).headless(false)
      .run(args);
  }

  @Override
  public void run(String... args) {
    JFrame frame = new JFrame("Spring Boot Swing App");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300,300);
    JPanel panel = new JPanel(new BorderLayout());
    JTextField text = new JTextField("Spring Boot can be used with Swing apps");
    panel.add(text, BorderLayout.CENTER);
    frame.setContentPane(panel);
    frame.setVisible(true);
  }
}

Hiç yorum yok:

Yorum Gönder