1 Sabre academy Wstęp do Angular.js I Spring BootMichał Łoza
2 O mnie Sabre Student Softwaree Engineer in Test Projekt Intel ExchangePracuję od 1,5 roku Student Na wydziale IET AGH Informatyka i Telekomunikacja Aktualnie na V roku
3 Agenda Technologie – szybki wstęp Angular.JS Spring BootDyrektywy, filtry, data binding Moduły i kontrolery Widoki i Routing Spring Boot MVC Baza danych, modele i repozytoria REST webservice Przykład połączenia tych technologii Podumowanie, Q&A Technologie: maven, rest, ioc, di
4 Wstęp
5 ANGULAR.JS Framework JS OpenSource: https://github.com/angular/angular.js Pozwala oddzielić warstwę logiki od prezentacji
6 Spring Framework Java Wiele komponentów ułatwiających programowanieMVC Spring JPA REST Webservices Testing Wiele innych… Udostępnia wiele rzeczy. Kontener IoC. Dodatkowy przykład: systemy autoryzacji. Różne implementacje zależnie od konfiguracji możemy wstrzyknąć inną implementację. Pozostałe wymienić i powiedzieć że pokażę jak wygląda użycie ich w spring boocie.
7 Spring boot Brak XML Szybki start Embedded Tomcat Autokonfiguracja
8 MAVEN Automatyzacja budowania aplikacji w JAVIEAutomatyczne pobieranie bibliotek Wtyczki rozszerzające możliwości Mavena Definicja właściwości projektu w pom.xml (project object model) Podobne: ant, make
9 Angular.js
10 Przykład I – Data Binding Task list!
{{searchPhrase}}
11 Przykład II - Filtry Task list!
{{ searchPhrase }}
12 Przykład III – Moduły i kontroleryvar app = angular.module('taskListApp', []); app.controller('taskListController', function($scope) { this.taskList = [ {id: 1, name: "Do shopping", description: "Buy milk & coffe", done: false, budget: }, {…} ] });
13 Przykład III – Moduły i kontrolery
Done Id Name Description {{ task.id }} {{ task.name }} {{ task.description }} {{ task.budget | currency }}
14 Przykład IV – Widoki i routerapp.config(function ($routeProvider) { $routeProvider.when("/", { controller: 'taskListController', templateUrl: 'views/task-ready.html' }).when("/details/:id", { controller: 'taskDetailsController', templateUrl: 'views/details-ready.html' }) });
15 Spring Boot
16 Plik POM
17 Hello World public class ApplicationReady { @RequestMapping("/") @ResponseBody String home() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(ApplicationReady.class, args); } }
18 Hello World public class ApplicationReady { @RequestMapping("/") @ResponseBody String home() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(ApplicationReady.class, args); } } Pokazać endpointy z actuatora: trace beans health dump
19 Widoki
20 Baza dancyh
21 Baza danych II Insert into task(name, description, budget, done) values('Task 1', 'Description of task 1', , 1); Insert into task(name, description, budget, done) values('Task 2', 'Description of task 2 Do', , 1); Insert into task(name, description, budget, done) values('Task 3', 'Description of task 3 Do', 50.00, 0); public interface TaskRepository extends CrudRepository
22 REST WS public class RestController { @Autowired TaskRepository taskRepository; @RequestMapping(method = RequestMethod.GET) @ResponseBody public Iterable
23 REST WS II public class TaskRepositoryTest { @Autowired TaskRepository repository; @Value("${local.server.port}") int port; String endpoint; RestTemplate restTemplate = new RestTemplate(); @Before public void before() { repository.deleteAll(); endpoint = "http://localhost:"+port+"/task"; } @Test public void testCreateEntity() throws Exception { Task request = new Task().withBudget(100.3).withName("Task 1").withDone(true).withDescription("Task 1 description"); Task response = restTemplate.postForObject(endpoint, request, Task.class); Iterable
24 Angular.js + Spring Boot
25 Servisy Angular.JS app.factory('taskService', function ($http) { return { getAllTasks: function () { return $http.get("/task"); }, getTask: function (id) { return $http.get("/task/" + id); }, deleteTask: function (id) { return $http.delete("/task/" + id); }, createTask: function (task) { return $http.post("/task", task); } } }); app.controller('taskDetailsController', ['$scope', '$routeParams', 'taskService', function ($scope, $routeParams, taskService) { var id = $routeParams.id; taskService.getTask(id).success(function(data) { $scope.task = data; }); }]); Dodać przykład z listą i iteracją
26 Podsumowanie
27 Aplikacja Podsumowanie Dodać przykład z listą i iteracją Spring BootBackend Rest WS MVC Komunikacja z bazą danych Angular.JS Frontend Data Binding Filtry, Routing Widoki, Kontrolery Komunikacja RestWS WebSockets Aplikacja Dodać przykład z listą i iteracją
28 Dziękuję! Pytania?