{"id":258190,"date":"2015-05-28T20:42:02","date_gmt":"2015-05-28T16:42:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=258190"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=258190","title":{"rendered":"\u0418\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u043c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u043d\u0430 Java \u2014 \u043f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u0439 Framework (DI, ORM, MVC and etc)"},"content":{"rendered":"<p>     \t\u0412\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e Java Common \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0434\u043b\u044f \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 Stack Overflow \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 3-5-10 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430. \u041a\u043e\u043f\u0438-\u043f\u0430\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430\u0434\u043e\u0435\u043b\u043e. \u0420\u0435\u0448\u0438\u043b \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u044d\u0442\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c Open Source \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0438 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043b\u0438\u0431\u044b \u043a\u0430\u043a Google Guava \u0438 Apache Common, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0432 \u0440\u0430\u0431\u043e\u0442\u0435, \u043d\u043e \u043e\u043d\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435\u00bb \u0438 \u0433\u0438\u0431\u043a\u0438\u0435, \u0447\u0442\u043e \u0432\u044b\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0432\u0435\u0447\u0435\u0440\u0430\u043c\u0438 \u0434\u043e\u043c\u0430 \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0440\u0435\u043c\u044f \u044f \u043f\u043e\u043a\u0440\u044b\u043b \u0437\u0430 1 \u043d\u0435\u0434\u0435\u043b\u044e \u0441\u043b\u0435\u0434\u044e\u0443\u0449\u0438\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f: Sleep\/Delay\/Pause, Timer for Benchmark, Random range generator, File operations, Tasks\/Threads, Reflection, JSON, URL, Logging, Strings. \u0421\u043c\u043e\u0442\u0440\u0435\u043b \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043a\u043e\u043f\u0438-\u043f\u0430\u0441\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438 \u043f\u0438\u0441\u0430\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b TDD \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0438\u0448\u0435\u0448\u044c \u0442\u0435\u0441\u0442 \u043d\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b, \u0430 \u043f\u043e\u0442\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0448\u044c \u043a\u043e\u0434, \u0447\u0442\u043e \u0431\u044b \u0442\u0435\u0441\u0442\u044b \u0441\u0442\u0430\u043b\u0438 \u0437\u0435\u043b\u0435\u043d\u044b\u043c\u0438. \u0420\u0435\u0448\u0430\u0435\u0442 \u0434\u0432\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u044b \u043f\u044b\u0442\u0430\u0435\u0448\u044c\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043e \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 \u0443 \u0442\u0435\u0431\u044f \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0441\u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f \u0438 \u0442\u044b \u043f\u043e\u0439\u043c\u0435\u0448\u044c, \u0447\u0442\u043e \u0443 \u0442\u0435\u0431\u044f \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0435\u043d\u0433\u0435 \u0438\u043b\u0438 \u0431\u0430\u0433\u0444\u0438\u043a\u0441\u0435.<\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435, \u0431\u043e\u043b\u044c\u0448\u0435. \u042f \u043d\u0430\u0447\u0430\u043b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u044f \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435, \u0442\u0438\u043f\u0438\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e Spring\/JBoss \u0438 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e legacy \u0438 \u0448\u0438\u0440\u043e\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 Dependency Injection. \u0421\u043a\u0430\u0437\u0430\u043d\u043e, \u0441\u0434\u0435\u043b\u0430\u043d\u043e. \u0414\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u0441\u0432\u043e\u044e \u0431\u0438\u043b\u0438\u043e\u0442\u0435\u043a\u0443 DI Framework. \u041c\u043e\u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043c\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u0447\u0442\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d Spring \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e, \u0442\u0430\u043c \u043f\u043e\u043b\u043d\u0430\u044f \u0436\u0435\u0441\u0442\u044c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043e\u0431\u0432\u0435\u0440\u0442\u043e\u043a, \u0430 \u0443 \u0442\u0435\u0431\u044f \u0432\u0441\u0435 \u0432\u0438\u0434\u043d\u043e \u043f\u0440\u044f\u043c \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0418\u043c \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u0442\u0434.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0432 DI Framework \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043d\u0430\u0434 \u0442\u0435\u043c, \u0447\u0442\u043e \u0435\u0449\u0435 \u0447\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 Enterprise Server. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c ORM \u0438 Web-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441 MVC, REST \u0438 security. \u0412\u0441\u0435 \u0432 \u043b\u0443\u0447\u0448\u0438\u0445 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u044f\u0445, \u0442\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u0418 \u043c\u0435\u043d\u044f \u0437\u0430\u0442\u044f\u043d\u0443\u043b\u043e. \u0415\u0449\u0435 \u043d\u0435\u0434\u0435\u043b\u044c\u043a\u0430 \u0432\u0435\u0447\u0435\u0440\u0430\u043c\u0438 \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u0441\u0441\u043e\u0440\u044b \u0441 \u0436\u0435\u043d\u043e\u0439, \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f Simplified Enterprise Server. \u042f \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 JavaEE, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0438\u0441\u0430\u043b, \u043a\u0430\u043a \u0431\u044b \u043c\u043d\u0435 \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0421\u0430\u043c \u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e Spring Boot, Spring Data, JPA 2.0, Spring MVC, Spring Rest, Spring Security. \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u043b \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 JBoss, \u0432\u0438\u0434\u0435\u043b \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 JEE, \u0442\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u041d\u043e \u0432\u0441\u044f \u044d\u0442\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432 \u0442\u0435\u043c\u0443. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u0431\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0432 \u0441\u0442\u0438\u043b\u0435 JEE \u0438\u043b\u0438 \u0442\u0435\u0431\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u043e\u0434\u0438\u0442\u044c \u0441\u0435\u0440\u044c\u0435\u0437\u0434\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 Java, \u043e\u043a\u0443\u043d\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u0438\u0440 Spring, Hibernate \u0438 \u0442.\u0434. \u0434\u043e\u043b\u0433\u043e \u0438 \u043a\u0440\u043e\u043f\u043e\u0442\u043b\u0438\u0432\u043e. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u044d\u0442\u043e Spring Boot, \u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0442\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043a\u0440\u044b\u0442\u043e \u043e\u0442 \u0442\u0435\u0431\u044f \u0438 \u0435\u0441\u043b\u0438 \u0442\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u0448\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Spring \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c, \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0431\u044f \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u043e\u0439 \u0448\u0430\u0433 \u0432 \u043b\u0435\u0432\u043e \u0438\u043b\u0438 \u0432 \u043f\u0440\u0430\u0432\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u043d\u044b\u0440\u043e\u043a \u0432 \u0434\u0435\u0442\u0430\u043b\u0438\u2026<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435, \u043a\u043e\u0434 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 <a href=\"https:\/\/github.com\/evgenyigumnov\/common\">github.com\/evgenyigumnov\/common<\/a><\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 <a href=\"https:\/\/github.com\/evgenyigumnov\/example\">github.com\/evgenyigumnov\/example<\/a> \u0438 \u0432 \u043e\u043d\u043b\u0430\u0439\u043d\u0435 \u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"http:\/\/java.igumnov.com:8181\/\">java.igumnov.com:8181<\/a> \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c: demo \u041f\u0430\u0440\u043e\u043b\u044c: demo<\/p>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430:  <\/p>\n<pre><code class=\"bash\">.\/: pom.xml .\/javascript: user.js .\/pages: index.html layout.html login.html .\/sql: 1.sql .\/src\/main\/java\/com\/igumnov\/common\/example: App.java ExampleUser.java <\/code><\/pre>\n<p>  pom.xml  <\/p>\n<pre><code class=\"xml\">    &lt;dependencies&gt;         &lt;!-- \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430\u0448 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a --&gt;         &lt;dependency&gt;             &lt;groupId&gt;com.igumnov&lt;\/groupId&gt;             &lt;artifactId&gt;common&lt;\/artifactId&gt;             &lt;version&gt;3.15&lt;\/version&gt;         &lt;\/dependency&gt;         &lt;!-- \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0411\u0414 --&gt;         &lt;dependency&gt;             &lt;groupId&gt;com.h2database&lt;\/groupId&gt;             &lt;artifactId&gt;h2&lt;\/artifactId&gt;             &lt;version&gt;1.4.187&lt;\/version&gt;         &lt;\/dependency&gt;         &lt;!-- \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c Bootstrap, AnglularJS \u0438 \u0442\u0434 \u0438\u0437 webjars \u043f\u0440\u043e\u0435\u043a\u0442\u0430 --&gt;         &lt;dependency&gt;             &lt;groupId&gt;org.webjars&lt;\/groupId&gt;             &lt;artifactId&gt;angular-ui-bootstrap&lt;\/artifactId&gt;             &lt;version&gt;0.12.0&lt;\/version&gt;         &lt;\/dependency&gt;         &lt;dependency&gt;             &lt;groupId&gt;org.webjars&lt;\/groupId&gt;             &lt;artifactId&gt;angularjs&lt;\/artifactId&gt;             &lt;version&gt;1.3.8&lt;\/version&gt;         &lt;\/dependency&gt;         &lt;dependency&gt;             &lt;groupId&gt;org.webjars&lt;\/groupId&gt;             &lt;artifactId&gt;bootstrap&lt;\/artifactId&gt;             &lt;version&gt;3.3.1&lt;\/version&gt;         &lt;\/dependency&gt;     &lt;\/dependencies&gt; <\/code><\/pre>\n<p>  App.java  <\/p>\n<pre><code class=\"java\">public class App {      public static void main(String[] args) throws Exception {          ORM.connectionPool(&quot;org.h2.Driver&quot;, &quot;jdbc:h2:mem:test&quot;, &quot;SA&quot;, &quot;&quot;, 1, 3); \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0443\u043b \u043a\u043e\u043d\u043d\u0435\u043a\u0446\u0438\u0439 \u043a \u0411\u0414 (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 3 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0430)         ORM.applyDDL(&quot;sql&quot;); \/\/ \u041d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u0431\u0430\u0437\u0443 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043b\u0438 \u043e\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0441\u043b\u0438 \u0443\u0436\u0435 \u0434\u0430\u043b\u0430\u043b\u043e         WebServer.init(&quot;localhost&quot;, 8181); \/\/ \u0417\u0430\u0434\u0430\u0435\u043c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0430         WebServer.security(&quot;\/login&quot;, &quot;\/login&quot;, &quot;\/logout&quot;); \/\/ \u0413\u043e\u0432\u043e\u0440\u0438\u043c \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e URL-\u0430\u043c         WebServer.addRestrictRule(&quot;\/*&quot;, new String[]{&quot;user_role&quot;}); \/\/ \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0441 \u0440\u043e\u043b\u044c\u044e user_role         WebServer.addAllowRule(&quot;\/static\/*&quot;); \/\/ \u0414\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0443         WebServer.addClassPathHandler(&quot;\/static&quot;, &quot;META-INF\/resources\/webjars&quot;); \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0438\u0437 classpath \u043e\u0442 webjars         WebServer.addAllowRule(&quot;\/js\/*&quot;); \/\/ \u0414\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a \u043d\u0430\u0448\u0438\u043c Java Script-\u0430\u043c         WebServer.addStaticContentHandler(&quot;\/js&quot;, &quot;javascript&quot;); \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0432 \u043a\u0430\u043a\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043d\u0430 \u0432\u0438\u043d\u0442\u0435 \u043b\u0435\u0436\u0430\u0442 \u043d\u0430\u0448\u0438 Java Script           WebServer.addTemplates(&quot;pages&quot;,0); \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0432 \u043a\u0430\u043a\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043d\u0430 \u0432\u0438\u043d\u0442\u0435 \u043b\u0435\u0436\u0430\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446         \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e \u0443\u0440\u043b &quot;\/&quot;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c index.html         WebServer.addController(&quot;\/&quot;, (request, model) -&gt; {             model.put(&quot;time&quot;, new Date());             return &quot;index&quot;;         });         \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e \u0443\u0440\u043b &quot;\/login&quot;, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c login.html         WebServer.addController(&quot;\/login&quot;, (request, model) -&gt; {             return &quot;login&quot;;         });         \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c REST-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e \u0443\u0440\u043b &quot;\/rest\/user&quot; \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0447\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u0442\u043e\u0434\u043e\u043c POST\/PUT \u043f\u0440\u0438\u0441\u043b\u0430\u0442\u044c JSON-\u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 ExampleUser.class         WebServer.addRestController(&quot;\/rest\/user&quot;, ExampleUser.class, (request, postObj) -&gt; {             switch (request.getMethod()) {                 case (WebServer.METHOD_GET):  \/\/ \u041f\u0440\u0438\u043b\u0435\u0442\u0435\u043b GET \u0437\u0430\u043f\u0440\u043e\u0441                     ArrayList&lt;Object&gt; users;                     try {                         users = ORM.findAll(ExampleUser.class); \/\/ \u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439                     } catch (Exception e) {                         throw new WebServerException(e.getMessage()); \/\/ \u0421\u043b\u043e\u0432\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 JSON                     }                     return users; \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 JSON                 case (WebServer.METHOD_POST): \/\/ \u041f\u0440\u0438\u043b\u0435\u0442\u0435\u043b POST \u0437\u0430\u043f\u0440\u043e\u0441                     ExampleUser ret = null;                     try {                         ret = (ExampleUser) ORM.insert(postObj); \/\/ \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 \u0411\u0414                     } catch (Exception e) {                         throw new WebServerException(e.getMessage());                     }                     return ret; \/\/ \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u043f\u0440\u043e\u0441\u0442\u043e  \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0432\u0438\u0434\u0435 JSON                 case (WebServer.METHOD_DELETE): \/\/ \u041f\u0440\u0438\u043b\u0435\u0442\u0435\u043b DELETE \u0437\u0430\u043f\u0440\u043e\u0441                     ExampleUser user;                     try {                         user = (ExampleUser) ORM.findOne(ExampleUser.class, request.getParameter(&quot;userName&quot;)); \/\/ \u0418\u0449\u0435\u043c \u044e\u0437\u0435\u0440\u0430 \u0432 \u0411\u0414                         if(user.getUserName().equals(&quot;demo&quot;)) { \/\/ \u0415\u0441\u043b\u0438 \u044e\u0437\u0435\u0440 demo \u043d\u0435 \u0434\u0430\u0435\u043c \u0443\u0434\u0430\u043b\u044f\u0442\u044c                             throw new WebServerException(&quot;You cant delete user demo&quot;);                         } else {                             ORM.delete(user); \/\/ \u0418\u043d\u0430\u0447\u0435 \u0448\u043b\u0435\u043c \u0432 \u0411\u0414 delete-\u0437\u0430\u043f\u0440\u043e\u0441                         }                     } catch (Exception e) {                         throw new WebServerException(e.getMessage());  \/\/ \u0421\u043b\u043e\u0432\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 JSON                     }                     return user; \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c JSON \u044e\u0437\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438                 default:                     throw new WebServerException(&quot;Unsupported method&quot;); \/\/ \u0420\u0443\u0433\u0430\u0435\u043c\u0441\u044f \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u043b \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 PUT \u0438\u043b\u0438 \u0438\u043d\u043e\u0439             }         });           ArrayList&lt;Object&gt; users = ORM.findAll(ExampleUser.class); \/\/ \u0411\u0435\u0440\u0435\u043c \u0438\u0437 \u0411\u0414 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439          if (users.size() == 0) { \/\/ \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043f\u0443\u0441\u0442\u043e             ExampleUser user = new ExampleUser();             user.setUserName(&quot;demo&quot;);             user.setUserPassword(&quot;demo&quot;);             ORM.insert(user); \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c demo\/demo \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0411\u0414             WebServer.addUser(&quot;demo&quot;, &quot;demo&quot;, new String[]{&quot;user_role&quot;}); \/\/ \u0421\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c demo\/demo \u0441 \u0440\u043e\u043b\u044c\u044e user_role         }          users.stream().forEach((user) -&gt; {  \/\/ \u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0411\u0414             ExampleUser u = (ExampleUser) user;             WebServer.addUser(u.getUserName(), u.getUserPassword(), new String[]{&quot;user_role&quot;}); \/\/ \u0421\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043e \u043d\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0441 \u0440\u043e\u043b\u044c\u044e user_role         });          WebServer.start(); \/\/ \u0415\u0441\u043b\u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043a\u043e\u0434\u0430 \u0434\u043e\u0448\u043b\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0432\u0430\u043b\u0438\u043b\u043e\u0441\u044c \u043f\u043e Exception, \u0442\u043e \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440 :)      }  } <\/code><\/pre>\n<p>  ExampleUser.java  <\/p>\n<pre><code class=\"java\">\/\/ \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f JSON \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043c\u0435\u043f\u043f\u0438\u043d\u0433\u0430 \u0432 \u0411\u0414 public class ExampleUser {      @Id(autoIncremental = false) \/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e ORM \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Primary Key \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0442\u0441\u044f \u043b\u0438 \u043f\u0440\u0438 insert \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f     private String userName;     private String userPassword; ... } <\/code><\/pre>\n<p>  1.sql  <\/p>\n<pre><code class=\"sql\"># \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432 \u0411\u0414 \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 ORM \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0442\u0438\u043f\u0430 ExampleUser.class CREATE TABLE ExampleUser (userName VARCHAR(255) PRIMARY KEY, userPassword VARCHAR(255)) <\/code><\/pre>\n<p>  login.html  <\/p>\n<pre><code class=\"html\">&lt;!DOCTYPE html SYSTEM &quot;http:\/\/www.thymeleaf.org\/dtd\/xhtml1-strict-thymeleaf-spring4-4.dtd&quot;&gt; &lt;!-- \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 layout \u0438\u0437 layout.html --&gt; &lt;html xmlns:th=&quot;http:\/\/www.thymeleaf.org&quot; xmlns:layout=&quot;http:\/\/www.ultraq.net.nz\/thymeleaf\/layout&quot;       layout:decorator=&quot;layout&quot;&gt; &lt;body&gt; &lt;!-- \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0431\u043b\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 layout.html --&gt; &lt;div layout:fragment=&quot;content&quot;&gt;     &lt;form name=&quot;form&quot; action=&quot;\/j_security_check&quot; method=&quot;POST&quot;&gt;         &lt;div class=&quot;modal-header&quot;&gt;             &lt;h3 class=&quot;modal-title&quot;&gt;Login&lt;\/h3&gt;         &lt;\/div&gt;         &lt;div class=&quot;modal-body&quot;&gt;             &lt;div class=&quot;form-group&quot;&gt;                 &lt;input type=&quot;text&quot; name=&quot;j_username&quot; class=&quot;form-control&quot; value=&quot;&quot; placeholder=&quot;Login&quot;\/&gt;             &lt;\/div&gt;             &lt;div class=&quot;form-group&quot;&gt;                 &lt;input type=&quot;password&quot; name=&quot;j_password&quot; class=&quot;form-control&quot; placeholder=&quot;Password&quot;\/&gt;             &lt;\/div&gt;             &lt;div class=&quot;form-group&quot;&gt;                 &lt;button type=&quot;submit&quot; id=&quot;login&quot; class=&quot;btn btn-primary&quot;&gt;OK&lt;\/button&gt;             &lt;\/div&gt;         &lt;\/div&gt;     &lt;\/form&gt;  &lt;\/div&gt; &lt;\/body&gt; &lt;\/html&gt; <\/code><\/pre>\n<p>  index.html  <\/p>\n<pre><code class=\"html\">&lt;!DOCTYPE html SYSTEM &quot;http:\/\/www.thymeleaf.org\/dtd\/xhtml1-strict-thymeleaf-spring4-4.dtd&quot;&gt; &lt;!-- \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440 layout \u0438\u0437 layout.html --&gt; &lt;html xmlns:th=&quot;http:\/\/www.thymeleaf.org&quot; xmlns:layout=&quot;http:\/\/www.ultraq.net.nz\/thymeleaf\/layout&quot;       layout:decorator=&quot;layout&quot;&gt; &lt;body&gt; &lt;!-- \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0431\u043b\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 layout.html --&gt; &lt;div layout:fragment=&quot;content&quot;&gt;     &lt;!-- \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430 AngularJS--&gt;     &lt;script src=&quot;\/js\/user.js&quot;&gt;&lt;\/script&gt;     &lt;h1 th:text=&quot;${time}&quot;&gt;&lt;\/h1&gt; \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c     &lt;!-- \u041e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 UserCtrl --&gt;     &lt;div ng-controller=&quot;UserCtrl&quot;&gt;         &lt;table class=&quot;table&quot;&gt;             &lt;thead&gt;             &lt;tr&gt;                 &lt;th&gt;Name&lt;\/th&gt;                 &lt;th&gt;Password&lt;\/th&gt;                 &lt;th&gt;&lt;\/th&gt;             &lt;\/tr&gt;             &lt;\/thead&gt;             &lt;tbody&gt;            &lt;!-- \u0412 \u0446\u0438\u043a\u043b\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 --&gt;             &lt;tr ng-repeat=&quot;user in users&quot;&gt;                 &lt;td&gt;{{user.userName}}&lt;\/td&gt;                 &lt;td&gt;{{user.userPassword}}&lt;\/td&gt;                &lt;!-- \u041f\u043e \u043a\u043b\u0438\u043a\u0443 \u043d\u0430 \u043a\u0440\u0435\u0441\u0442\u0438\u043a \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f --&gt;                 &lt;td&gt;&lt;a href=&quot;#&quot;&gt;&lt;span class=&quot;glyphicon glyphicon-remove&quot; tooltip=&quot;Delete&quot; ng-click=&quot;deleteUser(user)&quot;\/&gt;&lt;\/a&gt;&lt;\/td&gt;             &lt;\/tr&gt;             &lt;\/tbody&gt;         &lt;\/table&gt;         &lt;div ng-model=&quot;user&quot;&gt;         &lt;!-- \u0424\u043e\u0440\u043c\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f --&gt;             &lt;div class=&quot;form-group&quot;&gt;                 &lt;input type=&quot;text&quot; class=&quot;form-control&quot; ng-model=&quot;user.userName&quot; placeholder=&quot;Login&quot;\/&gt;             &lt;\/div&gt;             &lt;div class=&quot;form-group&quot;&gt;                 &lt;input type=&quot;password&quot; class=&quot;form-control&quot; ng-model=&quot;user.userPassword&quot; placeholder=&quot;Password&quot;\/&gt;             &lt;\/div&gt;             &lt;div class=&quot;form-group&quot;&gt;                 &lt;!-- \u041f\u043e \u043a\u043b\u0438\u043a\u0443 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f --&gt;                 &lt;button class=&quot;btn btn-primary&quot; ng-click=&quot;addUser(user)&quot;&gt;Add&lt;\/button&gt;             &lt;\/div&gt;         &lt;\/div&gt;     &lt;\/div&gt; &lt;\/div&gt; &lt;\/body&gt; &lt;\/html&gt; <\/code><\/pre>\n<p>  layout.html  <\/p>\n<pre><code class=\"html\">&lt;!DOCTYPE html SYSTEM &quot;http:\/\/www.thymeleaf.org\/dtd\/xhtml1-strict-thymeleaf-spring4-4.dtd&quot;&gt; &lt;!-- \u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 AngularJS --&gt; &lt;html ng-app=&quot;com.igumnov.common.example&quot;&gt; &lt;head&gt;     &lt;title&gt;Title&lt;\/title&gt;     &lt;link rel=&quot;stylesheet&quot; href=&quot;\/static\/bootstrap\/3.3.1\/css\/bootstrap.min.css&quot; \/&gt;     &lt;meta charset=&quot;utf-8&quot; \/&gt;     &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot; \/&gt;     &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot; \/&gt; &lt;\/head&gt; &lt;body&gt; &lt;script src=&quot;\/static\/angularjs\/1.3.8\/angular.min.js&quot;&gt;&lt;\/script&gt; &lt;script src=&quot;\/static\/angularjs\/1.3.8\/angular-resource.min.js&quot;&gt;&lt;\/script&gt; &lt;script src=&quot;\/static\/angular-ui-bootstrap\/0.12.0\/ui-bootstrap-tpls.min.js&quot;&gt;&lt;\/script&gt; &lt;div class=&quot;container&quot;&gt; &lt;!-- \u0421\u044e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043d\u044b\u0439 \u0431\u043b\u043e\u043a --&gt;     &lt;div layout:fragment=&quot;content&quot;&gt;&lt;\/div&gt; &lt;\/div&gt; &lt;\/body&gt; &lt;\/html&gt; <\/code><\/pre>\n<p>  user.js  <\/p>\n<pre><code class=\"javascript\">angular.module('com.igumnov.common.example', ['ui.bootstrap', 'ngResource'])     .factory('User', ['$resource', function ($resource) { \/\/ \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c REST-\u0440\u0435\u0441\u0443\u0440\u0441 User         return $resource('\/rest\/user', {}, {             list: { \/\/ \u0421\u043f\u0438\u0441\u043e\u043a \u044e\u0437\u0435\u0440\u043e\u0432                 method: 'GET',                 cache: false,                 isArray: true \/\/ \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0430\u0441\u0441\u0438\u0432             },             add: { \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044e\u0437\u0435\u0440\u0430                 method: 'POST',                 cache: false,                 isArray: false \/\/ \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442             },             delete: { \/\/ \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u044e\u0437\u0435\u0440\u0430                 method: 'DELETE',                 cache: false,                 isArray: false \/\/ \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442             }         });     }])     .controller('UserCtrl', function ($scope, User) { \/\/ \u041e\u0431\u044c\u044f\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 UserCtrl         $scope.users = User.list({}); \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430         $scope.addUser = function (user) { \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f             User.add({},user,function (data) { \/\/ \u0414\u0435\u0440\u0433\u0430\u0435\u043c REST-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441                 $scope.users = User.list({});   \/\/ \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439             }, function (err) {                 alert(err.data.message); \/\/ \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443             });         }         $scope.deleteUser = function (user) { \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f             User.delete({&quot;userName&quot; : user.userName},user,function (data) { \/\/ \u0414\u0435\u0440\u0433\u0430\u0435\u043c REST-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441                 $scope.users = User.list({}); \/\/ \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439             }, function (err) {                 alert(err.data.message); \/\/ \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443             });         }      }); <\/code><\/pre>\n<p>  \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u043b\u044e\u0431\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u043a\u0435 \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e \u043a\u043e\u0434\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0414\u043b\u044f \u0441\u0435\u0431\u044f \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043f\u0440\u043e\u0444\u0438\u0442 \u0432 \u0440\u0430\u0437\u043c\u0438\u043d\u0430\u043d\u0438\u0438 \u043c\u043e\u0437\u0433\u0430 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439\/\u043b\u044f\u043c\u0431\u0434. \u0418\u043d\u043e\u0433\u0434\u0430 \u0441\u043a\u0443\u0447\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0440\u0430\u0431\u043b\u044c. \u041d\u0435 \u0441\u0442\u0438\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0444\u043e\u0440\u043a\u0430\u0442\u044c \u043c\u043e\u044e \u043b\u0438\u0431\u0443 \u0438 \u0441\u0430\u043c\u0438\u043c \u0435\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b. \u041e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430 \u0438 \u043b\u0435\u0433\u043a\u0430 \u0434\u043b\u044f \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0432 \u043d\u0435\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439. \u0411\u0443\u0434\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u0435\u043b\u0435\u043d, \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c \u043f\u0443\u043b\u043b \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u044b, \u0447\u0442\u043e \u0431\u044b \u0432\u0430\u0448\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u043d\u043e\u0441\u0438\u043b\u0438\u0441\u044c \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u042f \u043b\u0438\u0447\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c. \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u0444\u043e\u043d\u0430\u0442\u0438\u043a-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435\u0440, \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0432\u0442\u044b\u043a\u0430\u0435\u0442. \u041b\u044e\u0431\u043b\u044e \u043a\u043e\u0434\u0438\u0442\u044c! <\/p>\n<p>  PS \u0414\u0430-\u0434\u0430, \u044f \u043d\u0435 \u043b\u044e\u0431\u043b\u044e \u043f\u0438\u0441\u0430\u0442\u044c javacode, \u0448\u043b\u0438\u0442\u0435 \u043f\u0443\u043b\u043b \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u044b \u0441 \u043d\u0438\u043c, \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e \u043a\u043e\u0434\u0443 \u043b\u0438\u0431\u044b \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0435\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u2026     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/259005\/\"> http:\/\/habrahabr.ru\/post\/259005\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t\u0412\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e Java Common \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0434\u043b\u044f \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 Stack Overflow \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 3-5-10 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430. \u041a\u043e\u043f\u0438-\u043f\u0430\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430\u0434\u043e\u0435\u043b\u043e. \u0420\u0435\u0448\u0438\u043b \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u044d\u0442\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c Open Source \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0438 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043b\u0438\u0431\u044b \u043a\u0430\u043a Google Guava \u0438 Apache Common, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0432 \u0440\u0430\u0431\u043e\u0442\u0435, \u043d\u043e \u043e\u043d\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435\u00bb \u0438 \u0433\u0438\u0431\u043a\u0438\u0435, \u0447\u0442\u043e \u0432\u044b\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0432\u0435\u0447\u0435\u0440\u0430\u043c\u0438 \u0434\u043e\u043c\u0430 \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0440\u0435\u043c\u044f \u044f \u043f\u043e\u043a\u0440\u044b\u043b \u0437\u0430 1 \u043d\u0435\u0434\u0435\u043b\u044e \u0441\u043b\u0435\u0434\u044e\u0443\u0449\u0438\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f: Sleep\/Delay\/Pause, Timer for Benchmark, Random range generator, File operations, Tasks\/Threads, Reflection, JSON, URL, Logging, Strings. \u0421\u043c\u043e\u0442\u0440\u0435\u043b \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043a\u043e\u043f\u0438-\u043f\u0430\u0441\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438 \u043f\u0438\u0441\u0430\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b TDD \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0438\u0448\u0435\u0448\u044c \u0442\u0435\u0441\u0442 \u043d\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b, \u0430 \u043f\u043e\u0442\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0448\u044c \u043a\u043e\u0434, \u0447\u0442\u043e \u0431\u044b \u0442\u0435\u0441\u0442\u044b \u0441\u0442\u0430\u043b\u0438 \u0437\u0435\u043b\u0435\u043d\u044b\u043c\u0438. \u0420\u0435\u0448\u0430\u0435\u0442 \u0434\u0432\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u044b \u043f\u044b\u0442\u0430\u0435\u0448\u044c\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043e \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 \u0443 \u0442\u0435\u0431\u044f \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043c\u043e\u0433\u0443\u0442 \u0441\u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f \u0438 \u0442\u044b \u043f\u043e\u0439\u043c\u0435\u0448\u044c, \u0447\u0442\u043e \u0443 \u0442\u0435\u0431\u044f \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0435\u043d\u0433\u0435 \u0438\u043b\u0438 \u0431\u0430\u0433\u0444\u0438\u043a\u0441\u0435.<\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435, \u0431\u043e\u043b\u044c\u0448\u0435. \u042f \u043d\u0430\u0447\u0430\u043b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u044f \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435, \u0442\u0438\u043f\u0438\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e Spring\/JBoss \u0438 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e legacy \u0438 \u0448\u0438\u0440\u043e\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 Dependency Injection. \u0421\u043a\u0430\u0437\u0430\u043d\u043e, \u0441\u0434\u0435\u043b\u0430\u043d\u043e. \u0414\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u0441\u0432\u043e\u044e \u0431\u0438\u043b\u0438\u043e\u0442\u0435\u043a\u0443 DI Framework. \u041c\u043e\u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043c\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u0447\u0442\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d Spring \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e, \u0442\u0430\u043c \u043f\u043e\u043b\u043d\u0430\u044f \u0436\u0435\u0441\u0442\u044c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u043e\u0431\u0432\u0435\u0440\u0442\u043e\u043a, \u0430 \u0443 \u0442\u0435\u0431\u044f \u0432\u0441\u0435 \u0432\u0438\u0434\u043d\u043e \u043f\u0440\u044f\u043c \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0418\u043c \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u0442\u0434.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-258190","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/258190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=258190"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/258190\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=258190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=258190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=258190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}