Commit c8effb2d by Patryk Czarnik

extract interface

parent 960c2eb0
...@@ -19,6 +19,7 @@ public class Kalkulator { ...@@ -19,6 +19,7 @@ public class Kalkulator {
Dowiązania z różnych miejsc aplikacji domyślnie prowadzą do jednego wspólnego obiektu (tego singletona / beana / komponentu). Dowiązania z różnych miejsc aplikacji domyślnie prowadzą do jednego wspólnego obiektu (tego singletona / beana / komponentu).
Są 3 sposoby wstrzykiwania: przez pole (zmienną, tak jak tutaj), przez setter i przez konstruktor. Są 3 sposoby wstrzykiwania: przez pole (zmienną, tak jak tutaj), przez setter i przez konstruktor.
Gdy typem zmiennej jest interfejs, to Spring wśród komponentów szuka implementacji tego interfejsu i jeśli znajdzie, to wstrzykuje.
*/ */
@Autowired @Autowired
private LogikaKalkulatora logika; private LogikaKalkulatora logika;
......
package com.example.demo; package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import org.springframework.stereotype.Component; public interface LogikaKalkulatora {
/* LogikaKalkulatora jest przykładem "komponentu". long oblicz(long liczba1, long liczba2, String operacja);
* Podczas startu aplikacji Spring tworzy jeden obiekt tej klasy (tzw. singleton) i zapamiętuje go jako "bean".
* W starszych wersjach Springa tego typu klasy należało zadeklarować w pliku beans.xml.
* Obecnie używa się raczej adnotacji. Takie działanie mają adnotacje: @Component, @Service, @Repository, @Controller.
*
* Inny sposób tworzenia beanów/kompomentów: klasa fabryczna z metodami oznaczonymi @Bean (będą inne przykłady).
*/
@Component List<String> getHistoriaDzialan();
public class LogikaKalkulatora {
private final List<String> historiaDzialan = Collections.synchronizedList(new ArrayList<>());
public long oblicz(long liczba1, long liczba2, String operacja) { }
long wynik = switch(operacja) { \ No newline at end of file
case "+" -> liczba1 + liczba2;
case "-" -> liczba1 - liczba2;
case "*" -> liczba1 * liczba2;
case "/" -> liczba1 / liczba2;
default -> 0;
};
historiaDzialan.add(String.format("%d %s %d = %d", liczba1, operacja, liczba2, wynik));
return wynik;
}
public List<String> getHistoriaDzialan() {
return Collections.unmodifiableList(historiaDzialan);
}
}
package com.example.demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.stereotype.Component;
/* LogikaKalkulatora jest przykładem "komponentu".
* Podczas startu aplikacji Spring tworzy jeden obiekt tej klasy (tzw. singleton) i zapamiętuje go jako "bean".
* W starszych wersjach Springa tego typu klasy należało zadeklarować w pliku beans.xml.
* Obecnie używa się raczej adnotacji. Takie działanie mają adnotacje: @Component, @Service, @Repository, @Controller.
*
* Inny sposób tworzenia beanów/kompomentów: klasa fabryczna z metodami oznaczonymi @Bean (będą inne przykłady).
*/
@Component
public class LogikaKalkulatoraImpl implements LogikaKalkulatora {
private final List<String> historiaDzialan = Collections.synchronizedList(new ArrayList<>());
@Override
public long oblicz(long liczba1, long liczba2, String operacja) {
long wynik = switch(operacja) {
case "+" -> liczba1 + liczba2;
case "-" -> liczba1 - liczba2;
case "*" -> liczba1 * liczba2;
case "/" -> liczba1 / liczba2;
default -> 0;
};
historiaDzialan.add(String.format("%d %s %d = %d", liczba1, operacja, liczba2, wynik));
return wynik;
}
@Override
public List<String> getHistoriaDzialan() {
return Collections.unmodifiableList(historiaDzialan);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment