Skip to content

Commit cbb2da3

Browse files
committed
added README.md - part 1
1 parent 5dff7e8 commit cbb2da3

1 file changed

Lines changed: 204 additions & 0 deletions

File tree

README.md

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
Spring Boot
2+
======
3+
4+
### Tworzenie nowego projektu
5+
6+
Nowy projekt Spring Boot możemy w bardzo prosty sposób utworzyć za pomocą jednego z dwóch narzędzi:
7+
* utworzenie nowego projektu w zakładce `File -> New -> Project -> Spring Initializr` - *tylko w IntelliJ IDEA Ultimate*
8+
* utworzenie nowego projektu do pobrania w formacie `*.zip` za pośrednictwem strony https://start.spring.io/
9+
10+
### Metoda main
11+
12+
Aby uruchomić aplikację Spring Boot, metoda `main` i klasa, w której się ona znajduje powinna wyglądać następująco:
13+
14+
```java
15+
@SpringBootApplication
16+
public class SpringBootApplication {
17+
18+
public static void main(String[] args) {
19+
SpringApplication.run(SpringBootApplication.class, args);
20+
}
21+
22+
}
23+
```
24+
25+
26+
### Tworzenie beanów
27+
28+
Bean to obiekt zarządzany przez kontekst Springa. Aplikację w Springu Bootcie można sobie wyobrazić jako jeden kontener,
29+
w którym umieszczone są nasze beany i które możemy "wstrzykiwać" (czyli wykorzystywać nasze obiekty) w innych komponentach
30+
również zawartych w kontenerze. Beanów nie musimy tworzyć samodzielnie, tj. poprzez wywołanie konstruktora - za tę czynność
31+
odpowiada Spring Boot
32+
33+
Definicję beanów umieszczamy w klasie oznaczonej adnotacją `@Configuration`.
34+
35+
Przykład:
36+
```java
37+
@Configuration
38+
public class ShapeFormatterConfiguration {
39+
40+
@Bean
41+
public ShapeFormatter triangleFormatter() {
42+
return new TriangleFormatter();
43+
}
44+
45+
}
46+
```
47+
48+
### Wstrzykiwanie beanów
49+
50+
Aby móć wykorzystać nasz bean w innym komponencie zawartym w kontekście Springa, korzystamy z adnotacji `@Autowired`.
51+
52+
Przykład:
53+
```java
54+
@Service
55+
public class EntityServiceImpl implements EntityService {
56+
57+
@Autowired
58+
private EntityRepository entityRepository;
59+
60+
public List<Entity> findAll() {
61+
return entityRepository.findAll();
62+
}
63+
64+
}
65+
```
66+
67+
68+
### Nazywanie beanów
69+
70+
Może zdarzyć się sytuacja, w której aplikacja Springa nie będzie wiedziała, który bean ma wstrzyknąć do naszego komponentu.
71+
W takiej sytuacji musimy nazwać nasze beany oraz wskazać poprzez nazwę, z którego beana chcemy skorzystać. Służy do tego
72+
adnotacja `@Qualifier`.
73+
74+
Przykład:
75+
76+
```java
77+
@Configuration
78+
public class ShapeFormatterConfiguration {
79+
80+
@Bean
81+
@Qualifier("triangleFormatter")
82+
public ShapeFormatter triangleFormatter() {
83+
return new TriangleFormatter();
84+
}
85+
86+
@Bean
87+
@Qualifier("squareFormatter")
88+
public ShapeFormatter squareFormatter() {
89+
return new SquareFormatter();
90+
}
91+
92+
}
93+
```
94+
95+
```java
96+
@Service
97+
public class ShapeService {
98+
99+
@Autowired
100+
@Qualifier("triangleFormatter")
101+
private ShapeFormatter shapeFormatter;
102+
103+
public void format(Shape shape) {
104+
shapeFormatter.format(shape);
105+
}
106+
107+
}
108+
```
109+
110+
### Inne przydatne adnotacje
111+
112+
* `@Component` - najbardziej ogólna adnotacja w Spring Boot. Klasa oznaczona taką adnotacją będzie znaleziona
113+
i umieszczona w kontekście (kontenerze) aplikacji
114+
* `@Repository` - adnotacja dedykowana dla klas, których zadaniem jest przechowywanie danych
115+
* `@Service` - adnotacja dedykowana dla klas, które sa odpowiedzialne za dostarczanie usłu
116+
* `@Controller` - adnotacja dedykowana dla klas, które reprezentują warstwę prezentacji lub API aplikacji
117+
* `@Configuration` - adnotacja dedykowana dla klas, które zawierają w sobie definicję beanów
118+
119+
120+
### Spring Boot jako REST API
121+
122+
Aplikacja w Spring Boot może pełnić rolę REST API. Aby stworzyć aplikację przechwytującą dane HTTP requesty, należy
123+
dodać do pliku `pom.xml` dependency:
124+
125+
```xml
126+
<dependency>
127+
<groupId>org.springframework.boot</groupId>
128+
<artifactId>spring-boot-starter-web</artifactId>
129+
</dependency>
130+
```
131+
132+
Następnie należy utworzyć klasę reprezentującą nasz kontroler i oznaczyć ją adnotacją `@RestController`. W ciele tej klasy
133+
wstrzykujemy np. beana reprezentującego serwis interesujacych nas danych i tworzymy metody, które
134+
będą realizowane przy przechwyceniu danego żądania.
135+
136+
Aby dana metoda metoda mogła przechwycić dany request, należy oznaczyć ją adnotacją `@GetMapping`, `@PostMapping`, `@DeleteMapping`, itd. w zależności od typu żadania HTTP (tj. np.
137+
POST, PUT, GET, DELETE, PATCH, ...). Następnie jako argument adnotacji podajemy ścieżkę dostępu, czyli np. `/entity` - w tym przypadku
138+
tak oznaczona metoda będzie mogła przechwycić requesty z `[host]:[port]/entity`.
139+
140+
Dodatkowo możemy ustawić ścieżkę dostępu dla całego kontrolera, jeżeli np. budujemy REST API dla różnych rodzajów danych
141+
i chcemy wydzielić bardziej ogólne ścieżki dostępu dla każdej z nich. W tym celu korzystamy z adnotacji `@RequestMapping`, którą
142+
umieszczamy na klasą reprezentującą kontroler. Analogicznie jako argument podajemy ścieżkę dostępu.
143+
144+
Pełny przykład:
145+
```java
146+
@RestController
147+
@RequestMapping("/entity")
148+
public class EntityController {
149+
150+
@Autowired
151+
private EntityService entityService;
152+
153+
@GetMapping("/all")
154+
public List<Entity> findAll() {
155+
return entityService.findAll();
156+
}
157+
158+
@DeleteMapping("/{id}")
159+
public void deleteById(@PathVariable String id) {
160+
entityService.deleteById(id);
161+
}
162+
163+
@PostMapping
164+
public void createEntity(@RequestBody Entity entity) {
165+
entityService.createOrUpdate(entity);
166+
}
167+
168+
@PutMapping
169+
public void updateEntity()
170+
171+
}
172+
```
173+
174+
#### @PathVariable i @RequestParam
175+
176+
W poniższym przykładzie widzimy użycie adnotacji `@PathVariable`. Służy ona do odczytania części ścieżki, którą
177+
nie może być ustawiona "na sztywno" - np. ID danego entity (ponieważ dla każdego entity ID jest różne).
178+
179+
Zatem w naszym przypadku,
180+
jeżeli nasz *GET request* będzie wyglądał następująco: `localhost:8080/entity/a2`, to otrzymamy danego o entity z ID `a2`
181+
182+
```java
183+
@GetMapping("/entity/{id}")
184+
public Optional<Entity> findById(@PathVariable String id) {
185+
entityService.deleteById(id);
186+
}
187+
```
188+
189+
W przypadku, gdybyśmy chcieli odczytać tzw. *query parameters* danego żądania, musimy skorzystać z adnotacji `@RequestParam`.
190+
Działanie tej adnotacji obrazuje poniższy przykład:
191+
192+
```java
193+
@GetMapping("/api/v2")
194+
public String getIdParam(@RequestParam String id) {
195+
return id;
196+
}
197+
```
198+
199+
Dla *GET request*: `localhost:8080/api/v2?id=a2`, otrzymamy ze strony serwera odpowiedź: `a2`.
200+
201+
202+
### Spring Boot + JPA + MySQL
203+
204+
[w budowie]

0 commit comments

Comments
 (0)