Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
java_dzienna_15_09
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
java_dzienna_15_09
Commits
3326f45f
Commit
3326f45f
authored
Oct 04, 2022
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Wydzielenie interfejsu LogikaKalkulatora i wstrzykiwanie przez interfejs
parent
64291d6b
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
50 additions
and
35 deletions
+50
-35
Kalkulator.java
PC29-Spring/src/main/java/com/example/demo/Kalkulator.java
+3
-0
LogikaKalkulatora.java
...ing/src/main/java/com/example/demo/LogikaKalkulatora.java
+3
-35
LogikaKalkulatoraImpl.java
...src/main/java/com/example/demo/LogikaKalkulatoraImpl.java
+44
-0
No files found.
PC29-Spring/src/main/java/com/example/demo/Kalkulator.java
View file @
3326f45f
...
@@ -10,6 +10,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
...
@@ -10,6 +10,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@Controller
@RequestMapping
(
"/kalkulator"
)
@RequestMapping
(
"/kalkulator"
)
public
class
Kalkulator
{
public
class
Kalkulator
{
// @Autowired powoduje, że Spring sam wpisze tutaj referencję do obiektu (do "komponentu" / "beana" zarejestrowanego w tej aplikacji)
// Nawet, gdy zmienna jest typu interfejs, a istnieje komponent, który implementuje ten interfejs,
// to Spring znajdzie ten komponent i go użyje.
@Autowired
@Autowired
private
LogikaKalkulatora
logikaKalkulatora
;
private
LogikaKalkulatora
logikaKalkulatora
;
...
...
PC29-Spring/src/main/java/com/example/demo/LogikaKalkulatora.java
View file @
3326f45f
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
{
/* Wstrzykiwaie zależności (dependency injection):
long
oblicz
(
String
operacja
,
long
liczba1
,
long
liczba2
);
* - gdy przed klasą napiszemy adnotację @Component (albo: @Service, @Repository, @Controller, ...)
* to na starcie aplikacji Spring utworzy jeden obiekt tej klasy ("singleton") i będzie go pamiętać
* (ten obiekt będzie "beanem")
* - są też inne sposoby tworzenie beanów (konfiguracja w pliku beans.xml, adnotacje @Bean przy metodzie fabrycznej, ...)
*
* - gdy w innej klasie przy polu danego typu uzyjemy adnotacji @Autowired, to Spring wpisze tam referencję do znaego sobie obiektu danej klasy
* - są też inne sposoby wstrzykiwania: poprzez setter i poprzez konstruktor.
*/
@Component
List
<
String
>
getHistoriaDzialan
();
public
class
LogikaKalkulatora
{
// Ponieważ ten sam obiekt listy będzie używany w różnych zapytaniach, to może być używany przez różne wątki.
// dlatego tworzymy listę "synchronizowaną", żeby np. równoległe operacje add sobie nie przeszkadzały.
private
final
List
<
String
>
historiaDzialan
=
Collections
.
synchronizedList
(
new
ArrayList
<>());
public
long
oblicz
(
String
operacja
,
long
liczba1
,
long
liczba2
)
{
long
wynik
=
switch
(
operacja
)
{
case
"+"
->
liczba1
+
liczba2
;
case
"-"
->
liczba1
-
liczba2
;
case
"*"
->
liczba1
*
liczba2
;
case
"/"
->
liczba1
/
liczba2
;
case
"%"
->
liczba1
%
liczba2
;
default
->
0
;
};
historiaDzialan
.
add
(
String
.
format
(
"%d %s %d = %s"
,
liczba1
,
operacja
,
liczba2
,
wynik
));
return
wynik
;
}
public
List
<
String
>
getHistoriaDzialan
()
{
return
Collections
.
unmodifiableList
(
historiaDzialan
);
// dla zwiększenia bezpieczeństwa wątkowego, można by też zwrócić kopię
}
}
}
\ No newline at end of file
PC29-Spring/src/main/java/com/example/demo/LogikaKalkulatoraImpl.java
0 → 100644
View file @
3326f45f
package
com
.
example
.
demo
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
org.springframework.stereotype.Component
;
/* Wstrzykiwaie zależności (dependency injection):
* - gdy przed klasą napiszemy adnotację @Component (albo: @Service, @Repository, @Controller, ...)
* to na starcie aplikacji Spring utworzy jeden obiekt tej klasy ("singleton") i będzie go pamiętać
* (ten obiekt będzie "beanem")
* - są też inne sposoby tworzenie beanów (konfiguracja w pliku beans.xml, adnotacje @Bean przy metodzie fabrycznej, ...)
*
* - gdy w innej klasie przy polu danego typu użyjemy adnotacji @Autowired, to Spring wpisze tam referencję do znaego sobie obiektu danej klasy
* - są też inne sposoby wstrzykiwania: poprzez setter i poprzez konstruktor.
*/
@Component
public
class
LogikaKalkulatoraImpl
implements
LogikaKalkulatora
{
// Ponieważ ten sam obiekt listy będzie używany w różnych zapytaniach, to może być używany przez różne wątki.
// dlatego tworzymy listę "synchronizowaną", żeby np. równoległe operacje add sobie nie przeszkadzały.
private
final
List
<
String
>
historiaDzialan
=
Collections
.
synchronizedList
(
new
ArrayList
<>());
@Override
public
long
oblicz
(
String
operacja
,
long
liczba1
,
long
liczba2
)
{
long
wynik
=
switch
(
operacja
)
{
case
"+"
->
liczba1
+
liczba2
;
case
"-"
->
liczba1
-
liczba2
;
case
"*"
->
liczba1
*
liczba2
;
case
"/"
->
liczba1
/
liczba2
;
case
"%"
->
liczba1
%
liczba2
;
default
->
0
;
};
historiaDzialan
.
add
(
String
.
format
(
"%d %s %d = %s"
,
liczba1
,
operacja
,
liczba2
,
wynik
));
return
wynik
;
}
@Override
public
List
<
String
>
getHistoriaDzialan
()
{
return
Collections
.
unmodifiableList
(
historiaDzialan
);
// dla zwiększenia bezpieczeństwa wątkowego, można by też zwrócić kopię
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment