{"id":61047,"date":"2024-02-07T11:24:12","date_gmt":"2024-02-07T04:24:12","guid":{"rendered":"https:\/\/itviec.com\/blog\/?p=61047"},"modified":"2024-10-10T15:00:09","modified_gmt":"2024-10-10T08:00:09","slug":"spring-framework-la-gi","status":"publish","type":"post","link":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/","title":{"rendered":"Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec?"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed9i dung b\u00e0i vi\u1ebft<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#Spring_la_gi_Spring_Framework_la_gi\" >Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#Loi_ich_cua_Spring_Framework\" >L\u1ee3i \u00edch c\u1ee7a Spring Framework<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#Tinh_nang_cua_Spring\" >T\u00ednh n\u0103ng c\u1ee7a Spring<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#Cac_Module_va_kien_truc_cua_Spring_Framework\" >C\u00e1c Module v\u00e0 ki\u1ebfn tr\u00fac c\u1ee7a Spring Framework<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#Cach_Spring_hoat_dong\" >C\u00e1ch Spring ho\u1ea1t \u0111\u1ed9ng<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#Mot_so_nguon_tai_lieu_Spring_tham_khao\" >M\u1ed9t s\u1ed1 ngu\u1ed3n t\u00e0i li\u1ec7u Spring tham kh\u1ea3o<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#Nhung_cau_hoi_Spring_Framework_thuong_gap\" >Nh\u1eefng c\u00e2u h\u1ecfi Spring Framework th\u01b0\u1eddng g\u1eb7p<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#Tong_ket_Spring_la_gi\" >T\u1ed5ng k\u1ebft Spring l\u00e0 g\u00ec<\/a><\/li><\/ul><\/nav><\/div>\n<p><b><i>Spring Framework gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean d\u1ec5 d\u00e0ng t\u1ea1o c\u00e1c \u1ee9ng d\u1ee5ng Java Enterprise (Java EE) v\u00e0 cung c\u1ea5p m\u1ecdi th\u1ee9 b\u1ea1n c\u1ea7n \u0111\u1ec3 s\u1eed d\u1ee5ng ng\u00f4n ng\u1eef Java. L\u00e0 m\u00e3 ngu\u1ed3n m\u1edf, Spring c\u00f3 c\u1ed9ng \u0111\u1ed3ng r\u1ed9ng l\u1edbn v\u00e0 n\u0103ng \u0111\u1ed9ng, ph\u1ea3n h\u1ed3i li\u00ean t\u1ee5c d\u1ef1a tr\u00ean nhi\u1ec1u tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng th\u1ef1c t\u1ebf. \u0110i\u1ec1u n\u00e0y \u0111\u00e3 gi\u00fap Spring ph\u00e1t tri\u1ec3n th\u00e0nh c\u00f4ng v\u00e0 tr\u1edf th\u00e0nh m\u1ed9t ngu\u1ed3n ki\u1ebfn th\u1ee9c m\u00e0 b\u1ea5t k\u1ef3 l\u1eadp tr\u00ecnh vi\u00ean n\u00e0o c\u0169ng c\u1ea7n hi\u1ec3u r\u00f5.<\/i><\/b><\/p>\n<p><span style=\"font-weight: 400;\">Trong b\u00e0i vi\u1ebft, ch\u00fang ta s\u1ebd l\u1ea7n l\u01b0\u1ee3t t\u00ecm hi\u1ec3u c\u00e1c n\u1ed9i dung:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Spring Framework l\u00e0 g\u00ec?<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">L\u1ee3i \u00edch cho c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">C\u00e1c th\u00e0nh ph\u1ea7n v\u00e0 ki\u1ebfn tr\u00fac Spring Framework<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">M\u1ed9t s\u1ed1 ngu\u1ed3n t\u00e0i li\u1ec7u <\/span>Spring Framework tham kh\u1ea3o<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Spring_la_gi_Spring_Framework_la_gi\"><\/span><b>Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec?<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Thu\u1eadt ng\u1eef &#8220;Spring&#8221; th\u01b0\u1eddng \u0111\u01b0\u1ee3c d\u00f9ng \u0111\u1ec3 ch\u1ec9 Spring Framework. Spring Framework \u0111\u01b0\u1ee3c chia th\u00e0nh c\u00e1c module. C\u00e1c \u1ee9ng d\u1ee5ng c\u00f3 th\u1ec3 ch\u1ecdn module c\u1ea7n thi\u1ebft. Tr\u1ecdng t\u00e2m l\u00e0 c\u00e1c module c\u1ee7a b\u1ed9 ch\u1ee9a l\u00f5i (core container), bao g\u1ed3m m\u00f4 h\u00ecnh c\u1ea5u h\u00ecnh (configuration model) v\u00e0 c\u01a1 ch\u1ebf ch\u00e8n ph\u1ea7n ph\u1ee5 thu\u1ed9c (dependency injection mechanism).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ngo\u00e0i ra, Spring Framework c\u00f2n cung c\u1ea5p h\u1ed7 tr\u1ee3 n\u1ec1n t\u1ea3ng cho nhi\u1ec1u ki\u1ebfn tr\u00fac \u1ee9ng d\u1ee5ng kh\u00e1c nhau, bao g\u1ed3m nh\u1eafn tin, truy\u1ec1n d\u1eef li\u1ec7u v\u00e0 web.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Framework n\u00e0y c\u0169ng bao g\u1ed3m framework web Spring MVC d\u1ef1a tr\u00ean Servlet v\u00e0 song song \u0111\u00f3 l\u00e0 framework web ph\u1ea3n \u1ee9ng Spring WebFlux.<\/span><b><\/b><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Loi_ich_cua_Spring_Framework\"><\/span><b>L\u1ee3i \u00edch c\u1ee7a Spring Framework<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">M\u1ed9t s\u1ed1 \u01b0u \u0111i\u1ec3m c\u1ee7a Spring Framework c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c k\u1ec3 \u0111\u1ebfn nh\u01b0 sau:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>M\u1eabu \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh tr\u01b0\u1edbc (Pre-defined Templates):<\/b><span style=\"font-weight: 400;\"> Spring framework ch\u1ee9a nhi\u1ec1u lo\u1ea1i template cho c\u00e1c c\u00f4ng ngh\u1ec7 Hibernate, JDBC v\u00e0 JPA. V\u1edbi s\u1ef1 h\u1ed7 tr\u1ee3 c\u1ee7a ph\u01b0\u01a1ng ph\u00e1p n\u00e0y, l\u1eadp tr\u00ecnh vi\u00ean kh\u00f4ng c\u1ea7n ph\u1ea3i \u0111\u1ecbnh ngh\u0129a code ph\u1ee9c t\u1ea1p. V\u00ed d\u1ee5: JdbcTemplate &#8211; \u1ede \u0111\u00e2y, ch\u00fang ta kh\u00f4ng c\u1ea7n vi\u1ebft logic \u0111\u1ec3 t\u1ea1o m\u1ed9t c\u00e2u l\u1ec7nh, x\u00e1c nh\u1eadn giao d\u1ecbch, t\u1ea1o k\u1ebft n\u1ed1i v\u00e0 x\u1eed l\u00fd ngo\u1ea1i l\u1ec7. \u0110i\u1ec1u n\u00e0y gi\u00fap ti\u1ebft ki\u1ec7m th\u1eddi gian.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>D\u1ec5 test v\u00e0 \u0111\u01a1n gi\u1ea3n: <\/b><span style=\"font-weight: 400;\">B\u1ea1n c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng test to\u00e0n b\u1ed9 \u1ee9ng d\u1ee5ng ch\u1ec9 b\u1eb1ng vi\u1ec7c s\u1eed d\u1ee5ng framework Spring v\u1edbi c\u01a1 ch\u1ebf ch\u00e8n ph\u1ee5 thu\u1ed9c. \u1ee8ng d\u1ee5ng EJB ho\u1eb7c Struts y\u00eau c\u1ea7u m\u00e1y ch\u1ee7 \u0111\u1ec3 th\u1ef1c thi \u1ee9ng d\u1ee5ng.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Kh\u00f4ng x\u00e2m ph\u1ea1m:<\/b><span style=\"font-weight: 400;\"> Theo k\u1ef9 thu\u1eadt Plain Old Java Object (POJO), Spring d\u1ec5 tri\u1ec3n khai v\u00ec kh\u00f4ng \u00e9p bu\u1ed9c l\u1eadp tr\u00ecnh vi\u00ean ph\u1ea3i k\u1ebf th\u1eeba c\u00e1c l\u1edbp c\u1ee5 th\u1ec3 ho\u1eb7c th\u1ef1c hi\u1ec7n tr\u00ean b\u1ea5t k\u1ef3 giao di\u1ec7n n\u00e0o.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Ph\u00e1t tri\u1ec3n nhanh ch\u00f3ng: <\/b><span style=\"font-weight: 400;\">V\u1edbi s\u1ef1 gi\u00fap \u0111\u1ee1 c\u1ee7a ch\u00e8n ph\u1ee5 thu\u1ed9c, vi\u1ec7c t\u00edch h\u1ee3p framework v\u00e0 h\u1ed7 tr\u1ee3 ph\u00e1t tri\u1ec3n \u1ee9ng d\u1ee5ng d\u1ef1a tr\u00ean Java EE (Enterprise Edition) tr\u1edf n\u00ean d\u1ec5 d\u00e0ng.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>H\u1ed7 tr\u1ee3 tr\u1eebu t\u01b0\u1ee3ng m\u1ea1nh m\u1ebd: <\/b><span style=\"font-weight: 400;\">Spring h\u1ed7 tr\u1ee3 kh\u1ea3 n\u0103ng tr\u1eebu t\u01b0\u1ee3ng m\u1ea1nh m\u1ebd cho c\u00e1c quy \u0111\u1ecbnh d\u1ef1a tr\u00ean Java EE nh\u01b0 JMS, JDBC, JPA v\u00e0 JTA.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>G\u1ecdn g\u00e0ng:<\/b><span style=\"font-weight: 400;\"> Framework web Spring l\u00e0 m\u1ed9t framework web MVC cung c\u1ea5p l\u1ef1a ch\u1ecdn tuy\u1ec7t v\u1eddi so v\u1edbi c\u00e1c framework web ph\u00e1t tri\u1ec3n \u1ee9ng d\u1ee5ng b\u1eb1ng Struts ho\u1eb7c c\u00e1c framework web ph\u1ed5 bi\u1ebfn kh\u00e1c.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Spring cung c\u1ea5p m\u1ed9t <a href=\"https:\/\/itviec.com\/blog\/api-la-gi\/\" target=\"_blank\" rel=\"noopener\">API<\/a> ph\u00f9 h\u1ee3p: <\/b><span style=\"font-weight: 400;\">Spring d\u1ecbch c\u00e1c ngo\u1ea1i l\u1ec7 c\u1ee5 th\u1ec3 c\u1ee7a c\u00f4ng ngh\u1ec7 t\u1eeb JDBC, Hibernate ho\u1eb7c JDO th\u00e0nh c\u00e1c ngo\u1ea1i l\u1ec7 th\u1ed1ng nh\u1ea5t v\u00e0 kh\u00f4ng ki\u1ec3m so\u00e1t \u0111\u01b0\u1ee3c.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>IoC (Inversion of Control) nh\u1eb9:<\/b><span style=\"font-weight: 400;\"> IoC k\u00edch th\u01b0\u1edbc nh\u1eb9, \u0111\u1eb7c bi\u1ec7t khi so v\u1edbi c\u00e1c container EJB. L\u1ee3i th\u1ebf n\u00e0y gi\u00fap t\u1ea1o v\u00e0 tri\u1ec3n khai \u1ee9ng d\u1ee5ng tr\u00ean m\u00e1y t\u00ednh c\u00f3 t\u00e0i nguy\u00ean b\u1ed9 nh\u1edb v\u00e0 CPU h\u1ea1n ch\u1ebf.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Qu\u1ea3n l\u00fd giao d\u1ecbch li\u00ean t\u1ee5c:<\/strong> Spring cung c\u1ea5p m\u1ed9t giao di\u1ec7n c\u00f3 th\u1ec3 gi\u00fap gi\u1ea3m quy m\u00f4 xu\u1ed1ng giao d\u1ecbch c\u1ee5c b\u1ed9 (v\u00ed d\u1ee5: s\u1eed d\u1ee5ng m\u1ed9t c\u01a1 s\u1edf d\u1eef li\u1ec7u) v\u00e0 m\u1edf r\u1ed9ng l\u00ean giao d\u1ecbch to\u00e0n c\u1ea7u (v\u00ed d\u1ee5: JTA).<\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Tinh_nang_cua_Spring\"><\/span><b>T\u00ednh n\u0103ng c\u1ee7a Spring<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Spring h\u1ed7 tr\u1ee3 qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n nh\u1eefng \u1ee9ng d\u1ee5ng Java ph\u1ee9c t\u1ea1p v\u00e0 kh\u00f3 qu\u1ea3n l\u00fd b\u1eb1ng c\u00e1ch cung c\u1ea5p m\u1ed9t framework t\u00edch h\u1ee3p nhi\u1ec1u c\u00f4ng ngh\u1ec7 nh\u01b0:<\/span><\/p>\n<h3><b>L\u1eadp Tr\u00ecnh H\u01b0\u1edbng Ch\u1ee9c N\u0103ng (Aspect-oriented Programming &#8211; AOP)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">L\u00e0 m\u1ed9t ph\u01b0\u01a1ng ph\u00e1p l\u1eadp tr\u00ecnh trong Spring Framework, AOP t\u1eadp trung v\u00e0o chia nh\u1ecf ch\u1ee9c n\u0103ng c\u1ee7a \u1ee9ng d\u1ee5ng th\u00e0nh c\u00e1c kh\u00eda c\u1ea1nh ri\u00eang l\u1ebb v\u00e0 ch\u00e8n ch\u00fang v\u00e0o source code m\u1ed9t c\u00e1ch linh ho\u1ea1t.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">AOP cung c\u1ea5p nhi\u1ec1u module h\u01a1n cho nh\u1eefng t\u00ednh n\u0103ng quan tr\u1ecdng xuy\u00ean su\u1ed1t trong c\u00e1c \u1ee9ng d\u1ee5ng, nh\u01b0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Ghi nh\u1eadt k\u00fd (Logging)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">B\u1ed9 nh\u1edb \u0111\u1ec7m (Caching)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Qu\u1ea3n l\u00fd giao d\u1ecbch<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">X\u00e1c th\u1ef1c<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">AOP c\u00f3 s\u1eb5n c\u00e1c kh\u1ea3 n\u0103ng l\u1eadp tr\u00ecnh h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng (Object-oriented Programming &#8211; OOP) \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh c\u1ea5u tr\u00fac c\u1ee7a ph\u1ea7n m\u1ec1m, trong \u0111\u00f3 t\u00ednh module OOP \u0111\u01b0\u1ee3c thi\u1ebft l\u1eadp trong c\u00e1c class.<\/span><\/p>\n<blockquote><p><em>\u0110\u1ecdc th\u00eam: <a href=\"https:\/\/itviec.com\/blog\/oop-la-gi\/\" target=\"_blank\" rel=\"noopener\"><strong>OOP l\u00e0 g\u00ec? 4 \u0111\u1eb7c t\u00ednh c\u01a1 b\u1ea3n c\u1ee7a OOP<\/strong><\/a><\/em><\/p><\/blockquote>\n<p><span style=\"font-weight: 400;\">Trong AOP, \u0111\u01a1n v\u1ecb module ch\u00ednh l\u00e0 m\u1ed9t y\u1ebfu t\u1ed1. \u0110i\u1ec1u n\u00e0y cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng s\u1eed d\u1ee5ng AOP \u0111\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c t\u00f9y ch\u1ec9nh ch\u1ee9c n\u0103ng v\u00e0 khai b\u00e1o d\u1ecbch v\u1ee5 doanh nghi\u1ec7p.<\/span><\/p>\n<h3><b>Ch\u00e8n ph\u1ee5 thu\u1ed9c (Dependency Injection &#8211; DI)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Dependency Injection l\u00e0 c\u1ed1t l\u00f5i c\u1ee7a Spring Framework gi\u00fap qu\u1ea3n l\u00fd v\u00e0 gi\u1ea3m s\u1ef1 ph\u1ee5 thu\u1ed9c gi\u1eefa c\u00e1c th\u00e0nh ph\u1ea7n trong \u1ee9ng d\u1ee5ng. Thay v\u00ec t\u1ea1o \u0111\u1ed1i t\u01b0\u1ee3ng m\u1ed9t c\u00e1ch tr\u1ef1c ti\u1ebfp, DI cho ph\u00e9p t\u1ea1o c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng ph\u1ee5 thu\u1ed9c b\u00ean ngo\u00e0i m\u1ed9t class v\u00e0 cung c\u1ea5p c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng \u0111\u00f3 cho m\u1ed9t class theo nhi\u1ec1u c\u00e1ch kh\u00e1c nhau, gi\u00fap t\u0103ng t\u00ednh linh ho\u1ea1t, t\u00e1i s\u1eed d\u1ee5ng v\u00e0 ki\u1ec3m th\u1eed c\u1ee7a source code.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ch\u00fang ta c\u00f3 th\u1ec3 \u0111\u1ecbnh ngh\u0129a kh\u00e1i ni\u1ec7m Spring b\u1eb1ng Inversion of Control (IoC &#8211; \u0111\u1ea3o ng\u01b0\u1ee3c ki\u1ec3m so\u00e1t).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">V\u00ed d\u1ee5: Class X ph\u1ee5 thu\u1ed9c v\u00e0o class Y. S\u1ef1 ph\u1ee5 thu\u1ed9c n\u00e0y c\u00f3 th\u1ec3 t\u1ea1o ra nhi\u1ec1u v\u1ea5n \u0111\u1ec1 tr\u00ean th\u1ef1c t\u1ebf, bao g\u1ed3m c\u1ea3 l\u1ed7i h\u1ec7 th\u1ed1ng. Do \u0111\u00f3 c\u1ea7n ph\u1ea3i tr\u00e1nh s\u1ef1 ph\u1ee5 thu\u1ed9c nh\u01b0 v\u1eady. Spring IOC gi\u1ea3i quy\u1ebft c\u00e1c v\u1ea5n \u0111\u1ec1 ph\u1ee5 thu\u1ed9c nh\u01b0 v\u1eady b\u1eb1ng Dependency Injection. \u1ede \u0111\u00e2y, n\u00f3 ch\u1ec9 ra r\u1eb1ng class Y s\u1ebd \u0111\u01b0\u1ee3c IoC \u0111\u01b0a v\u00e0o class X.<\/span><\/p>\n<h3><b>Plain Old Java Object (POJO)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Trong Spring, POJO l\u00e0 c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng Java th\u00f4ng th\u01b0\u1eddng, kh\u00f4ng ph\u1ee5 thu\u1ed9c v\u00e0o b\u1ea5t k\u1ef3 framework hay interface n\u00e0o kh\u00e1c. S\u1eed d\u1ee5ng POJO trong Spring Framework gi\u00fap source code tr\u1edf n\u00ean \u0111\u01a1n gi\u1ea3n, d\u1ec5 \u0111\u1ecdc, v\u00e0 d\u1ec5 b\u1ea3o tr\u00ec m\u00e0 kh\u00f4ng c\u1ea7n k\u1ebf th\u1eeba c\u00e1c class hay tri\u1ec3n khai c\u00e1c interface c\u1ee5 th\u1ec3.<\/span><b><\/b><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cac_Module_va_kien_truc_cua_Spring_Framework\"><\/span><b>C\u00e1c Module v\u00e0 ki\u1ebfn tr\u00fac c\u1ee7a Spring Framework<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-61308 aligncenter\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-vippro.png\" alt=\"ki\u1ebfn tr\u00fac spring framework\" width=\"2688\" height=\"1827\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-vippro.png 2688w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-vippro-300x204.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-vippro-1600x1088.png 640w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-vippro-200x136.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-vippro-100x68.png 100w\" sizes=\"auto, (max-width: 2688px) 100vw, 2688px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Ki\u1ebfn tr\u00fac Spring Framework.<\/em><\/p>\n<p><span style=\"font-weight: 400;\">Spring framework \u0111\u01b0\u1ee3c chia th\u00e0nh c\u00e1c module v\u00e0 bao g\u1ed3m nhi\u1ec1u module cung c\u1ea5p c\u00e1c ch\u1ee9c n\u0103ng kh\u00e1c nhau \u0111\u1ec3 h\u1ed7 tr\u1ee3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng doanh nghi\u1ec7p.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u00e1c module c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c ph\u00e2n lo\u1ea1i r\u1ed9ng r\u00e3i v\u00e0o b\u1ed1n l\u0129nh v\u1ef1c ch\u00ednh: B\u1ed9 ch\u1ee9a l\u00f5i (Core Container), Truy c\u1eadp\/T\u00edch h\u1ee3p d\u1eef li\u1ec7u (Data Access\/Integration), Web, v\u00e0 Kh\u00e1c (Miscellaneous).<\/span><b><\/b><\/p>\n<h3><b>B\u1ed9 ch\u1ee9a l\u00f5i (Core Container)<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Core:<\/strong> Module n\u00e0y cung c\u1ea5p ch\u1ee9c n\u0103ng c\u01a1 b\u1ea3n c\u1ee7a framework Spring, bao g\u1ed3m IoC v\u00e0 DI. IoC container l\u00e0 tr\u00e1i tim c\u1ee7a Spring Framework, ch\u1ecbu tr\u00e1ch nhi\u1ec7m v\u1ec1 vi\u1ec7c t\u1ea1o ra v\u00e0 qu\u1ea3n l\u00fd c\u00e1c th\u1ec3 hi\u1ec7n c\u1ee7a JavaBeans.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Beans:<\/strong> Module n\u00e0y cung c\u1ea5p BeanFactory, l\u00e0 kh\u1ed1i x\u00e2y d\u1ef1ng c\u01a1 b\u1ea3n c\u1ee7a IoC container, v\u00e0 BeanWrapper, ch\u1ecbu tr\u00e1ch nhi\u1ec7m qu\u1ea3n l\u00fd v\u00f2ng \u0111\u1eddi c\u1ee7a m\u1ed9t bean. BeanFactory l\u00e0 giao di\u1ec7n c\u1ed1t l\u00f5i \u0111\u1ec3 truy c\u1eadp IoC container, cung c\u1ea5p c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u1ec3 truy xu\u1ea5t bean.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Context:<\/strong> Module n\u00e0y cung c\u1ea5p ApplicationContext, l\u00e0 m\u1ed9t phi\u00ean b\u1ea3n n\u00e2ng cao c\u1ee7a BeanFactory v\u00e0 cung c\u1ea5p c\u00e1c t\u00ednh n\u0103ng b\u1ed5 sung nh\u01b0 qu\u1ed1c t\u1ebf h\u00f3a v\u00e0 t\u1ea3i ngu\u1ed3n, c\u00f9ng kh\u1ea3 n\u0103ng xu\u1ea5t b\u1ea3n v\u00e0 ti\u00eau th\u1ee5 s\u1ef1 ki\u1ec7n.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Expression Language (SpEL):<\/strong> Module n\u00e0y cung c\u1ea5p m\u1ed9t ng\u00f4n ng\u1eef bi\u1ec3u di\u1ec5n m\u1ea1nh m\u1ebd \u0111\u1ec3 truy v\u1ea5n v\u00e0 thao t\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng trong th\u1eddi gian ch\u1ea1y. SpEL h\u1ed7 tr\u1ee3 m\u1ed9t lo\u1ea1t c\u00e1c t\u00ednh n\u0103ng, bao g\u1ed3m truy c\u1eadp thu\u1ed9c t\u00ednh, g\u1ecdi ph\u01b0\u01a1ng th\u1ee9c, \u0111i\u1ec1u ki\u1ec7n, v\u00f2ng l\u1eb7p v\u00e0 chuy\u1ec3n \u0111\u1ed5i ki\u1ec3u d\u1eef li\u1ec7u.<\/span><\/li>\n<\/ul>\n<h3><b>Truy c\u1eadp\/T\u00edch h\u1ee3p d\u1eef li\u1ec7u (Data Access\/Integration)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Truy c\u1eadp\/T\u00edch h\u1ee3p d\u1eef li\u1ec7u cung c\u1ea5p h\u1ed7 tr\u1ee3 t\u00edch h\u1ee3p v\u1edbi c\u01a1 s\u1edf d\u1eef li\u1ec7u v\u00e0 c\u00e1c ngu\u1ed3n d\u1eef li\u1ec7u kh\u00e1c. Ph\u1ea7n n\u00e0y bao g\u1ed3m c\u00e1c module sau:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring JDBC:<\/strong> Module n\u00e0y cung c\u1ea5p m\u1ed9t class tr\u1eebu t\u01b0\u1ee3ng JDBC \u0111\u01a1n gi\u1ea3n gi\u1ea3m l\u01b0\u1ee3ng code c\u1ea7n thi\u1ebft \u0111\u1ec3 l\u00e0m vi\u1ec7c v\u1edbi JDBC. Spring JDBC h\u1ed7 tr\u1ee3 qu\u1ea3n l\u00fd giao d\u1ecbch, cho ph\u00e9p nh\u00e0 ph\u00e1t tri\u1ec3n qu\u1ea3n l\u00fd giao d\u1ecbch c\u01a1 s\u1edf d\u1eef li\u1ec7u theo c\u00e1ch khai b\u00e1o b\u1eb1ng qu\u1ea3n l\u00fd giao d\u1ecbch c\u1ee7a Spring.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring ORM:<\/strong> Module n\u00e0y cung c\u1ea5p t\u00edch h\u1ee3p v\u1edbi c\u00e1c framework \u00e1nh x\u1ea1 \u0111\u1ed1i t\u01b0\u1ee3ng-quan h\u1ec7 (Object-Relational Mapping &#8211; ORM) nh\u01b0 Hibernate v\u00e0 JPA. Spring ORM cung c\u1ea5p m\u1ed9t class tr\u1eebu t\u01b0\u1ee3ng cao c\u1ea5p tr\u00ean c\u01a1 s\u1edf c\u00e1c framework ORM, gi\u00fap nh\u00e0 ph\u00e1t tri\u1ec3n vi\u1ebft \u00edt code boilerplate (m\u00e3 so\u1ea1n s\u1eb5n) v\u00e0 t\u00edch h\u1ee3p c\u00e1c c\u00f4ng ngh\u1ec7 ORM d\u1ec5 d\u00e0ng v\u1edbi c\u00e1c t\u00ednh n\u0103ng kh\u00e1c c\u1ee7a Spring nh\u01b0 qu\u1ea3n l\u00fd giao d\u1ecbch v\u00e0 caching.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Data:<\/strong> Module n\u00e0y cung c\u1ea5p m\u1ed9t m\u00f4 h\u00ecnh l\u1eadp tr\u00ecnh nh\u1ea5t qu\u00e1n v\u00e0 d\u1ec5 s\u1eed d\u1ee5ng \u0111\u1ec3 l\u00e0m vi\u1ec7c v\u1edbi c\u00e1c c\u00f4ng ngh\u1ec7 truy c\u1eadp d\u1eef li\u1ec7u, bao g\u1ed3m c\u01a1 s\u1edf d\u1eef li\u1ec7u, NoSQL v\u00e0 c\u00e1c d\u1ecbch v\u1ee5 d\u1eef li\u1ec7u d\u1ef1a tr\u00ean \u0111\u00e1m m\u00e2y. Spring Data cung c\u1ea5p nhi\u1ec1u t\u00ednh n\u0103ng, bao g\u1ed3m c\u00e1c ho\u1ea1t \u0111\u1ed9ng CRUD t\u1ef1 \u0111\u1ed9ng, t\u1ea1o truy v\u1ea5n t\u1eeb t\u00ean ph\u01b0\u01a1ng th\u1ee9c, h\u1ed7 tr\u1ee3 ph\u00e2n trang v\u00e0 s\u1eafp x\u1ebfp, t\u00edch h\u1ee3p v\u1edbi qu\u1ea3n l\u00fd giao d\u1ecbch c\u1ee7a Spring, v\u00e0 nhi\u1ec1u h\u01a1n n\u1eefa.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Transaction:<\/strong> Module n\u00e0y cung c\u1ea5p h\u1ed7 tr\u1ee3 qu\u1ea3n l\u00fd giao d\u1ecbch tuy\u00ean b\u1ed1 trong \u1ee9ng d\u1ee5ng Spring. Spring Transaction h\u1ed7 tr\u1ee3 nhi\u1ec1u c\u1ea5p \u0111\u1ed9 truy\u1ec1n t\u1ea3i v\u00e0 c\u00e1ch ly giao d\u1ecbch, cho ph\u00e9p nh\u00e0 ph\u00e1t tri\u1ec3n qu\u1ea3n l\u00fd giao d\u1ecbch \u1edf c\u00e1c c\u1ea5p \u0111\u1ed9 kh\u00e1c nhau. Ngo\u00e0i ra, Spring Transaction h\u1ed7 tr\u1ee3 nhi\u1ec1u chi\u1ebfn l\u01b0\u1ee3c qu\u1ea3n l\u00fd giao d\u1ecbch, nh\u01b0 s\u1eed d\u1ee5ng m\u1ed9t qu\u1ea3n l\u00fd giao d\u1ecbch JTA ho\u1eb7c m\u1ed9t qu\u1ea3n l\u00fd giao d\u1ecbch JDBC \u0111\u01a1n gi\u1ea3n.<\/span><\/li>\n<\/ul>\n<h3><b>Web<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Web cung c\u1ea5p s\u1ef1 h\u1ed7 tr\u1ee3 \u0111\u1ec3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng web v\u00e0 bao g\u1ed3m c\u00e1c module sau:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring MVC:<\/strong> Module n\u00e0y cung c\u1ea5p m\u1ed9t framework Model-View-Controller (MVC) \u0111\u1ec3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng web. Spring MVC cung c\u1ea5p m\u1ed9t lo\u1ea1t c\u00e1c t\u00ednh n\u0103ng, bao g\u1ed3m h\u1ed7 tr\u1ee3 x\u1eed l\u00fd y\u00eau c\u1ea7u v\u00e0 ph\u1ea3n h\u1ed3i HTTP, x\u1eed l\u00fd bi\u1ec3u m\u1eabu, r\u00e0ng bu\u1ed9c d\u1eef li\u1ec7u, ki\u1ec3m tra v\u00e0 nhi\u1ec1u t\u00ednh n\u0103ng kh\u00e1c. Spring MVC c\u0169ng h\u1ed7 tr\u1ee3 nhi\u1ec1u c\u00f4ng ngh\u1ec7 hi\u1ec3n th\u1ecb kh\u00e1c nhau, nh\u01b0 JSP (JavaServer Pages), Thymeleaf v\u00e0 Velocity, cho ph\u00e9p nh\u00e0 ph\u00e1t tri\u1ec3n ch\u1ecdn c\u00f4ng ngh\u1ec7 hi\u1ec3n th\u1ecb ph\u00f9 h\u1ee3p nh\u1ea5t v\u1edbi nhu c\u1ea7u c\u1ee7a h\u1ecd.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring WebFlux:<\/strong> Module n\u00e0y cung c\u1ea5p m\u1ed9t m\u00f4 h\u00ecnh l\u1eadp tr\u00ecnh ph\u1ea3n \u1ee9ng \u0111\u1ec3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng web \u0111\u00f2i h\u1ecfi \u0111\u1ed9 t\u01b0\u01a1ng t\u00e1c v\u00e0 kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng cao. Spring WebFlux h\u1ed7 tr\u1ee3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng web ph\u1ea3n \u1ee9ng s\u1eed d\u1ee5ng nhi\u1ec1u c\u00f4ng ngh\u1ec7 nh\u01b0 Netty, Undertow v\u00e0 c\u00e1c container Servlet 3.1+. Spring WebFlux c\u0169ng h\u1ed7 tr\u1ee3 nhi\u1ec1u t\u00ednh n\u0103ng, bao g\u1ed3m h\u1ed7 tr\u1ee3 truy c\u1eadp d\u1eef li\u1ec7u ph\u1ea3n \u1ee9ng, x\u1eed l\u00fd lu\u1ed3ng ph\u1ea3n \u1ee9ng v\u00e0 m\u00e1y kh\u00e1ch HTTP ph\u1ea3n \u1ee9ng.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Web Services:<\/strong> Module n\u00e0y h\u1ed7 tr\u1ee3 x\u00e2y d\u1ef1ng c\u00e1c d\u1ecbch v\u1ee5 web d\u1ef1a tr\u00ean SOAP v\u00e0 RESTful. Spring Web Services cung c\u1ea5p h\u1ed7 tr\u1ee3 t\u1ea1o WSDL (Web Services Description Language) t\u1eeb c\u00e1c class Java v\u00e0 t\u1ea1o c\u00e1c class Java t\u1eeb WSDL. \u0110i\u1ec1u n\u00e0y cho ph\u00e9p nh\u00e0 ph\u00e1t tri\u1ec3n x\u00e1c \u0111\u1ecbnh h\u1ee3p \u0111\u1ed3ng (t\u1ee9c l\u00e0 giao di\u1ec7n) c\u1ee7a d\u1ecbch v\u1ee5 web b\u1eb1ng WSDL v\u00e0 t\u1ea1o ra c\u00e1c class Java th\u1ef1c hi\u1ec7n d\u1ecbch v\u1ee5 web t\u1eeb WSDL.<\/span><\/li>\n<\/ul>\n<h3><b>Kh\u00e1c (Miscellaneous)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\"><em>Kh\u00e1c<\/em> bao g\u1ed3m c\u00e1c module kh\u00e1c cung c\u1ea5p c\u00e1c ch\u1ee9c n\u0103ng b\u1ed5 sung, nh\u01b0:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Security:<\/strong> Module n\u00e0y cung c\u1ea5p c\u00e1c t\u00ednh n\u0103ng x\u00e1c th\u1ef1c v\u00e0 \u1ee7y quy\u1ec1n cho \u1ee9ng d\u1ee5ng Spring. Spring Security h\u1ed7 tr\u1ee3 nhi\u1ec1u c\u01a1 ch\u1ebf \u1ee7y quy\u1ec1n, nh\u01b0 ki\u1ec3m so\u00e1t quy\u1ec1n d\u1ef1a tr\u00ean vai tr\u00f2 v\u00e0 ki\u1ec3m so\u00e1t quy\u1ec1n d\u1ef1a tr\u00ean bi\u1ec3u th\u1ee9c, h\u1ed7 tr\u1ee3 b\u1ea3o m\u1eadt c\u00e1c ph\u1ea7n kh\u00e1c nhau c\u1ee7a \u1ee9ng d\u1ee5ng b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u1ea5u h\u00ecnh b\u1ea3o m\u1eadt kh\u00e1c nhau, cho ph\u00e9p c\u00e1c l\u1eadp tr\u00ecnh vi\u00ean \u00e1p d\u1ee5ng c\u00e1c ch\u00ednh s\u00e1ch b\u1ea3o m\u1eadt tinh t\u1ebf.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Integration:<\/strong> Module n\u00e0y h\u1ed7 tr\u1ee3 x\u00e2y d\u1ef1ng ki\u1ebfn tr\u00fac \u0111\u1ed9ng v\u00e0 s\u1ef1 ki\u1ec7n. Spring Integration cung c\u1ea5p nhi\u1ec1u m\u00f4 h\u00ecnh t\u00edch h\u1ee3p nh\u01b0 truy\u1ec1n tin, \u0111\u1ecbnh tuy\u1ebfn v\u00e0 bi\u1ebfn \u0111\u1ed5i, h\u1ed7 tr\u1ee3 nhi\u1ec1u h\u1ec7 th\u1ed1ng truy\u1ec1n tin kh\u00e1c nhau nh\u01b0 JMS, AMQP v\u00e0 Apache <a href=\"https:\/\/itviec.com\/blog\/kafka-la-gi\/\" target=\"_blank\" rel=\"noopener\">Kafka<\/a>, \u0111\u1ed3ng th\u1eddi t\u00edch h\u1ee3p v\u1edbi c\u00e1c giao th\u1ee9c kh\u00e1c nhau nh\u01b0 FTP, HTTP v\u00e0 TCP.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Batch:<\/strong> Module n\u00e0y h\u1ed7 tr\u1ee3 x\u1eed l\u00fd h\u00e0ng lo\u1ea1t v\u00e0 t\u00edch h\u1ee3p v\u1edbi c\u00e1c h\u1ec7 th\u1ed1ng doanh nghi\u1ec7p. Spring Batch cung c\u1ea5p m\u1ed9t lo\u1ea1t c\u00e1c c\u00f4ng c\u1ee5 v\u00e0 ti\u1ec7n \u00edch \u0111\u1ec3 x\u00e2y d\u1ef1ng v\u00e0 qu\u1ea3n l\u00fd c\u00e1c \u1ee9ng d\u1ee5ng x\u1eed l\u00fd h\u00e0ng lo\u1ea1t , bao g\u1ed3m h\u1ed7 tr\u1ee3 ki\u1ec3m th\u1eed v\u00e0 g\u1ee1 l\u1ed7i c\u00f4ng vi\u1ec7c h\u00e0ng lo\u1ea1t , \u0111\u0103ng nh\u1eadp v\u00e0 gi\u00e1m s\u00e1t, c\u0169ng nh\u01b0 t\u00edch h\u1ee3p v\u1edbi c\u00e1c module kh\u00e1c c\u1ee7a Spring nh\u01b0 Spring Data v\u00e0 Spring Integration.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\"><strong>Spring Cloud:<\/strong> Module n\u00e0y h\u1ed7 tr\u1ee3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng native \u0111\u00e1m m\u00e2y b\u1eb1ng c\u00e1c c\u00f4ng ngh\u1ec7 Spring. Spring Cloud cung c\u1ea5p nhi\u1ec1u t\u00ednh n\u0103ng cho vi\u1ec7c x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng native \u0111\u00e1m m\u00e2y, nh\u01b0 ph\u00e1t hi\u1ec7n d\u1ecbch v\u1ee5, qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh v\u00e0 c\u00e2n b\u1eb1ng t\u1ea3i, h\u1ed7 tr\u1ee3 t\u00edch h\u1ee3p v\u1edbi nhi\u1ec1u n\u1ec1n t\u1ea3ng \u0111\u00e1m m\u00e2y kh\u00e1c nhau nh\u01b0 AWS v\u00e0 GCP, c\u0169ng nh\u01b0 s\u1eed d\u1ee5ng c\u00e1c c\u00f4ng ngh\u1ec7 native \u0111\u00e1m m\u00e2y kh\u00e1c nh\u01b0 container v\u00e0 serverless computing.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">T\u00f3m l\u1ea1i, c\u00e1c module c\u1ee7a framework Spring cung c\u1ea5p m\u1ed9t b\u1ed9 c\u00f4ng c\u1ee5 \u0111\u1ec3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng doanh nghi\u1ec7p m\u1ea1nh m\u1ebd, c\u00f3 kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng v\u00e0 d\u1ec5 b\u1ea3o tr\u00ec. Ki\u1ebfn tr\u00fac modular c\u1ee7a framework Spring cho ph\u00e9p nh\u00e0 ph\u00e1t tri\u1ec3n ch\u1ec9 ch\u1ecdn c\u00e1c module c\u1ea7n thi\u1ebft cho nhu c\u1ea7u c\u1ee5 th\u1ec3 c\u1ee7a h\u1ecd, gi\u1ea3m chi ph\u00ed v\u1eadn h\u00e0nh kh\u00f4ng c\u1ea7n thi\u1ebft v\u00e0 s\u1ef1 ph\u1ee9c t\u1ea1p trong \u1ee9ng d\u1ee5ng.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cach_Spring_hoat_dong\"><\/span><b>C\u00e1ch Spring ho\u1ea1t \u0111\u1ed9ng<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">M\u1ed9t \u1ee9ng d\u1ee5ng web th\u01b0\u1eddng bao g\u1ed3m ba layer ch\u00ednh:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Layer Tr\u00ecnh B\u00e0y (UI): X\u1eed l\u00fd vi\u1ec7c hi\u1ec3n th\u1ecb n\u1ed9i dung v\u00e0 t\u01b0\u01a1ng t\u00e1c ng\u01b0\u1eddi d\u00f9ng.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Layer Logic Doanh Nghi\u1ec7p: X\u1eed l\u00fd c\u00e1c y\u00eau c\u1ea7u ch\u1ee9c n\u0103ng c\u01a1 b\u1ea3n c\u1ee7a ch\u01b0\u01a1ng tr\u00ecnh.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Layer Truy C\u1eadp D\u1eef Li\u1ec7u: Gi\u00e1m s\u00e1t quy tr\u00ecnh truy xu\u1ea5t d\u1eef li\u1ec7u.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">M\u1ed7i layer ph\u1ee5 thu\u1ed9c v\u00e0o layer kh\u00e1c \u0111\u1ec3 \u1ee9ng d\u1ee5ng ho\u1ea1t \u0111\u1ed9ng.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">V\u00ed d\u1ee5, layer tr\u00ecnh b\u00e0y c\u00f3 th\u1ec3 c\u1ea7n li\u00ean l\u1ea1c v\u1edbi layer logic doanh nghi\u1ec7p, m\u00e0 sau \u0111\u00f3 t\u01b0\u01a1ng t\u00e1c v\u1edbi layer truy c\u1eadp d\u1eef li\u1ec7u. M\u1ed7i t\u01b0\u01a1ng t\u00e1c n\u00e0y d\u1eabn \u0111\u1ebfn nh\u1eefng g\u00ec th\u01b0\u1eddng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 ph\u1ee5 thu\u1ed9c v\u00e0 t\u1ea1o ra s\u1ef1 k\u1ebft n\u1ed1i gi\u1eefa c\u00e1c th\u00e0nh ph\u1ea7n h\u1ec7 th\u1ed1ng kh\u00e1c nhau.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">M\u1ed9t trong nh\u1eefng \u0111\u1eb7c \u0111i\u1ec3m c\u1ed1t l\u00f5i c\u1ee7a Spring l\u00e0 kh\u1ea3 n\u0103ng th\u1ef1c hi\u1ec7n ch\u00e8n ph\u1ee5 thu\u1ed9c, \u0111\u00e2y l\u00e0 m\u1ed9t m\u00f4 h\u00ecnh l\u1eadp tr\u00ecnh cho ph\u00e9p l\u1eadp tr\u00ecnh vi\u00ean x\u00e2y d\u1ef1ng ki\u1ebfn tr\u00fac t\u00e1ch r\u1eddi (decoupled architectures). Spring hi\u1ec3u c\u00e1c ch\u00fa th\u00edch Java kh\u00e1c nhau m\u00e0 m\u1ed9t l\u1eadp tr\u00ecnh vi\u00ean \u0111\u1eb7t l\u00ean c\u00e1c layer v\u00e0 c\u00f3 th\u1ec3 gi\u00fap \u0111\u1ea3m b\u1ea3o r\u1eb1ng t\u1ea5t c\u1ea3 c\u00e1c th\u1ec3 hi\u1ec7n \u0111\u01b0\u1ee3c t\u1ea1o ra \u0111\u1ec1u c\u00f3 ph\u1ee5 thu\u1ed9c \u0111\u01b0\u1ee3c \u0111i\u1ec1n \u0111\u1ea7y \u0111\u1ee7.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u0110\u1ec3 Spring Framework c\u00f3 th\u1ec3 kh\u1edfi t\u1ea1o \u0111\u1ed1i t\u01b0\u1ee3ng v\u00e0 \u0111i\u1ec1n \u0111\u1ea7y \u0111\u1ee7 ph\u1ee5 thu\u1ed9c, l\u1eadp tr\u00ecnh vi\u00ean ch\u1ec9 c\u1ea7n n\u00f3i v\u1edbi Spring \u0111\u1ed1i t\u01b0\u1ee3ng n\u00e0o c\u1ea7n qu\u1ea3n l\u00fd v\u00e0 ph\u1ee5 thu\u1ed9c l\u00e0 g\u00ec cho m\u1ed7i layer th\u00f4ng qua c\u00e1c ch\u00fa th\u00edch.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">V\u00ed d\u1ee5, @Component cho Spring bi\u1ebft layer n\u00e0o c\u1ea7n qu\u1ea3n l\u00fd, \u0111\u00e1nh d\u1ea5u c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng l\u00e0 c\u00e1c th\u00e0nh ph\u1ea7n \u0111\u01b0\u1ee3c qu\u1ea3n l\u00fd v\u00e0 x\u00e1c \u0111\u1ecbnh layer cho ch\u00e8n ph\u1ee5 thu\u1ed9c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">M\u1ed9t v\u00ed d\u1ee5 kh\u00e1c l\u00e0 @Autowired cho bi\u1ebft cho Spring c\u00e1ch x\u1eed l\u00fd vi\u1ec7c kh\u1edfi t\u1ea1o c\u1ee7a layer v\u00e0 b\u1eaft \u0111\u1ea7u t\u00ecm ki\u1ebfm ph\u1ee5 thu\u1ed9c \u0111\u00f3 trong c\u00e1c th\u00e0nh ph\u1ea7n v\u00e0 layer \u0111\u1ec3 t\u00ecm m\u1ed9t s\u1ef1 t\u01b0\u01a1ng \u0111\u1ed3ng.<\/span><b><\/b><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Mot_so_nguon_tai_lieu_Spring_tham_khao\"><\/span><b>M\u1ed9t s\u1ed1 ngu\u1ed3n t\u00e0i li\u1ec7u Spring tham kh\u1ea3o<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><a href=\"https:\/\/www.amazon.com\/Spring-Action-Craig-Walls\/dp\/1617294942?tag=javamysqlanta-20\" target=\"_blank\" rel=\"noopener\"><b>Spring in Action 5th Edition<\/b><\/a><b> &#8211; S\u00e1ch<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Spring in Action l\u00e0 m\u1ed9t trong nh\u1eefng cu\u1ed1n s\u00e1ch t\u1ed1t nh\u1ea5t \u0111\u1ec3 h\u1ecdc framework Spring hi\u1ec7n nay, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng cu\u1ed1n s\u00e1ch n\u00e0y \u0111\u1ec3 t\u00ecm hi\u1ec3u v\u00e0 kh\u00e1m ph\u00e1 nh\u1eefng \u0111i\u1ec1u m\u1edbi trong Spring Framework 5, nh\u01b0 Reactive Spring, WebFlux, v.v.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">S\u00e1ch n\u00e0y c\u0169ng s\u1ebd h\u01b0\u1edbng d\u1eabn b\u1ea1n c\u00e1ch s\u1eed d\u1ee5ng Spring Framework v\u1edbi Java 9, l\u00e0m vi\u1ec7c v\u1edbi framework web ch\u1ee9c n\u0103ng m\u1edbi v\u00e0 t\u1ea1o ra c\u00e1c d\u1ecbch v\u1ee5 web b\u1eb1ng Spring Boot c\u00f9ng c\u00e1c c\u00f4ng ngh\u1ec7 \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y kh\u00e1c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 k\u1ebft h\u1ee3p cu\u1ed1n s\u00e1ch n\u00e0y v\u1edbi kh\u00f3a h\u1ecdc <\/span><a href=\"https:\/\/click.linksynergy.com\/fs-bin\/click?id=JVFxdTr9V80&amp;subid=0&amp;offerid=323058.1&amp;type=10&amp;tmpid=14538&amp;RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fspring-framework-5-beginner-to-guru%2F\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Spring Framework 5: Beginner to Guru<\/span><\/a><span style=\"font-weight: 400;\"> tr\u00ean Udemy, \u0111\u00e2y c\u0169ng l\u00e0 kh\u00f3a h\u1ecdc Spring framework \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt m\u1edbi nh\u1ea5t.<\/span><\/p>\n<h3><a href=\"https:\/\/click.linksynergy.com\/deeplink?id=JVFxdTr9V80&amp;mid=39197&amp;murl=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fspring-tutorial-for-beginners%2F\"><b>Spring Framework Masterclass: Java Spring the Modern Way<\/b><\/a><b> [Udemy]<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">\u0110i\u1ec3m n\u1ed5i b\u1eadt ch\u00ednh c\u1ee7a kh\u00f3a h\u1ecdc n\u00e0y l\u00e0 b\u1ea1n s\u1ebd s\u1eed d\u1ee5ng c\u00e1c d\u1ef1 \u00e1n th\u1ef1c \u0111\u1ec3 h\u1ecdc Spring Framework. \u0110i\u1ec1u n\u00e0y c\u00f3 ngh\u0129a l\u00e0 b\u1ea1n s\u1ebd c\u00f3 tr\u1ea3i nghi\u1ec7m th\u1ef1c h\u00e0nh v\u00e0 th\u1ef1c t\u1ebf h\u01a1n v\u1ec1 Spring, gi\u00fap b\u1ea1n h\u1ecdc nhanh h\u01a1n.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Kh\u00f3a h\u1ecdc n\u00e0y ho\u00e0n h\u1ea3o cho nh\u1eefng ng\u01b0\u1eddi c\u00f3 m\u1ed9t s\u1ed1 kinh nghi\u1ec7m l\u1eadp tr\u00ecnh trong Java nh\u01b0ng ho\u00e0n to\u00e0n m\u1edbi v\u1edbi Spring. B\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c gi\u1edbi thi\u1ec7u v\u1edbi nhi\u1ec1u t\u00ednh n\u0103ng c\u1ee7a Spring v\u00e0 c\u00e1c Module c\u1ee7a Spring nh\u01b0 JDBC, AOP v\u00e0 Data JPA.\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Th\u1eddi l\u01b0\u1ee3ng kh\u00f3a h\u1ecdc: 12 gi\u1edd<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Gi\u00e1 kh\u00f3a h\u1ecdc: $14<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Sau khi b\u1ea1n mua kh\u00f3a h\u1ecdc n\u00e0y, b\u1ea1n s\u1ebd c\u00f3 quy\u1ec1n truy c\u1eadp tr\u1ecdn \u0111\u1eddi v\u00e0o 12 gi\u1edd video b\u00e0i gi\u1ea3ng theo y\u00eau c\u1ea7u, 13 b\u00e0i vi\u1ebft v\u00e0 1 t\u00e0i nguy\u00ean gi\u00e1o tr\u00ecnh c\u00f3 th\u1ec3 t\u1ea3i xu\u1ed1ng. To\u00e0n b\u1ed9 n\u1ed9i dung kh\u00f3a h\u1ecdc \u0111\u01b0\u1ee3c chia th\u00e0nh 14 ph\u1ea7n v\u00e0 139 b\u00e0i gi\u1ea3ng.<\/span><\/p>\n<h3><a href=\"https:\/\/click.linksynergy.com\/deeplink?id=JVFxdTr9V80&amp;mid=40328&amp;murl=https%3A%2F%2Fwww.coursera.org%2Flearn%2Fweb-development-with-java-spring-framework\" target=\"_blank\" rel=\"noopener\"><b>Ph\u00e1t tri\u1ec3n Web v\u1edbi Java Spring Framework<\/b><\/a><b> [Coursera]<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Nh\u01b0 ti\u00eau \u0111\u1ec1 g\u1ee3i \u00fd, kh\u00f3a h\u1ecdc n\u00e0y t\u1eadp trung nhi\u1ec1u h\u01a1n v\u00e0o ph\u1ea7n ph\u00e1t tri\u1ec3n web b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng Web Java Framework ph\u1ed5 bi\u1ebfn. B\u1ea1n s\u1ebd h\u1ecdc c\u00e1ch s\u1eed d\u1ee5ng th\u01b0 vi\u1ec7n c\u1ee7a Spring \u0110\u1ec3 t\u1ea1o ra c\u00e1c c\u00f4ng ngh\u1ec7 nh\u01b0 truy\u1ec1n h\u00ecnh tr\u1ef1c tuy\u1ebfn, xe k\u1ebft n\u1ed1i v\u00e0 mua s\u1eafm tr\u1ef1c tuy\u1ebfn.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Kh\u00f3a h\u1ecdc n\u00e0y s\u1ebd bao g\u1ed3m c\u00e1c ph\u1ea7n ch\u00ednh c\u1ee7a Spring v\u00e0 gi\u00fap b\u1ea1n ph\u00e1t tri\u1ec3n c\u00e1c D\u1ecbch v\u1ee5 Web RESTFUL b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng Spring MVC v\u00e0 Hibernate CRUD.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Th\u1eddi l\u01b0\u1ee3ng kh\u00f3a h\u1ecdc: 19 gi\u1edd<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Gi\u00e1 kh\u00f3a h\u1ecdc: $15<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Khi b\u1ea1n ho\u00e0n th\u00e0nh kh\u00f3a h\u1ecdc, b\u1ea1n s\u1ebd c\u00f3 ki\u1ebfn th\u1ee9c v\u1eefng v\u1ec1 c\u00e1c kh\u00e1i ni\u1ec7m nh\u01b0 Dependency Injection, Inversion of Control, v\u00e0 truy c\u1eadp d\u1eef li\u1ec7u b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng Hibernate.<\/span><\/p>\n<h3><b>Code Katas \u0111\u1ec3 H\u1ecdc Spring\u00ae v\u00e0 Spring Boot<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Kh\u00f3a h\u1ecdc Spring n\u00e0y bao g\u1ed3m hai b\u00e0i gi\u1ea3ng li\u00ean quan gi\u00fap nh\u1eefng l\u1eadp tr\u00ecnh vi\u00ean hi\u1ec3u v\u1ec1 Spring Framework v\u00e0 sau \u0111\u00f3 l\u00e0 Spring Boot th\u00f4ng qua vi\u1ec7c gi\u1ea3i c\u00e1c b\u00e0i to\u00e1n l\u1eadp tr\u00ecnh (code katas).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To\u00e0n b\u1ed9 kh\u00f3a h\u1ecdc n\u00e0y \u0111\u01b0\u1ee3c \u0111\u1eb7t tr\u00ean GitHub v\u00e0 b\u1ea1n c\u00f3 th\u1ec3 truy c\u1eadp mi\u1ec5n ph\u00ed. Kh\u00f3a h\u1ecdc tr\u00ecnh b\u00e0y c\u00e1c v\u00ed d\u1ee5 \u0111\u01b0\u1ee3c th\u1ea3o lu\u1eadn th\u00f4ng qua t\u00e0i li\u1ec7u, n\u1eb1m trong th\u01b0 m\u1ee5c assets\\docs.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u00e1ch t\u1ed1t nh\u1ea5t \u0111\u1ec3 h\u1ecdc kh\u00f3a h\u1ecdc n\u00e0y l\u00e0 ki\u1ec3m tra to\u00e0n b\u1ed9 d\u1ef1 \u00e1n c\u00e1 nh\u00e2n, sau \u0111\u00f3 xem:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/github.com\/BNYMellon\/spring-kata\/blob\/main\/spring-framework\/README.adoc\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">T\u00e0i li\u1ec7u Spring Framework<\/span><\/a><span style=\"font-weight: 400;\">: H\u1ecdc Spring Framework.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/github.com\/BNYMellon\/spring-kata\/blob\/main\/spring-boot\/README.adoc\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">T\u00e0i li\u1ec7u Spring Boot<\/span><\/a><span style=\"font-weight: 400;\">: H\u1ecdc Spring Boot.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">C\u00e1c kh\u00f3a h\u1ecdc kh\u00e1 \u0111\u1ed9c l\u1eadp, ng\u01b0\u1eddi n\u00e0o \u0111\u00e3 bi\u1ebft v\u1ec1 Spring Framework c\u00f3 th\u1ec3 ch\u1ec9 c\u1ea7n xem h\u01b0\u1edbng d\u1eabn v\u1ec1 Spring Boot \u0111\u1ec3 nhanh ch\u00f3ng b\u1eaft k\u1ecbp.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Tuy nhi\u00ean, \u0111\u00f4i khi n\u00ean xem l\u1ea1i v\u00e0 \u0111\u1ecdc n\u1ed9i dung v\u1ec1 Spring Framework (ngay c\u1ea3 khi kh\u00f4ng th\u1ef1c hi\u1ec7n c\u00e1c b\u00e0i t\u1eadp). Ch\u00fang c\u0169ng bao g\u1ed3m h\u1ea7u h\u1ebft c\u00e1c ch\u1ee7 \u0111\u1ec1 quan tr\u1ecdng c\u1ee7a Spring nh\u01b0 l\u00f5i Spring, Spring Boot, Spring Data JPA, Spring REST, Hibernate, v\u00e0 nhi\u1ec1u h\u01a1n n\u1eefa.<\/span><\/p>\n<h3><a href=\"https:\/\/pluralsight.pxf.io\/c\/1193463\/424552\/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fspring-big-picture\"><b>Spring: The Big Picture<\/b><\/a><b> [Pluralsight]<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Kh\u00f3a h\u1ecdc n\u00e0y s\u1ebd cung c\u1ea5p cho b\u1ea1n nh\u1eefng ki\u1ebfn th\u1ee9c c\u1ea7n thi\u1ebft v\u1ec1 Spring Framework, Spring Boot v\u00e0 c\u00e1c d\u1ef1 \u00e1n kh\u00e1c li\u00ean quan \u0111\u1ebfn Spring v\u00e0 \u0111\u01b0\u1ee3c x\u1ebfp h\u1ea1ng 5 sao tr\u00ean n\u1ec1n t\u1ea3ng Pluralsight.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Th\u1eddi l\u01b0\u1ee3ng kh\u00f3a h\u1ecdc: 2 gi\u1edd<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Gi\u00e1 kh\u00f3a h\u1ecdc: $149 cho \u0111\u0103ng k\u00fd h\u00e0ng n\u0103m<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Trong kh\u00f3a h\u1ecdc n\u00e0y, b\u1ea1n s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c c\u00e1i nh\u00ecn t\u1ed5ng quan, bao qu\u00e1t \u1edf c\u1ea5p \u0111\u1ed9 cao v\u1ec1 t\u1ea5t c\u1ea3 c\u00e1c kh\u00eda c\u1ea1nh c\u1ee7a Spring Framework, b\u1eaft \u0111\u1ea7u b\u1eb1ng vi\u1ec7c t\u00ecm hi\u1ec3u Spring l\u00e0 g\u00ec tr\u01b0\u1edbc khi kh\u00e1m ph\u00e1 Spring Boot v\u00e0 Spring Framework.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Sau khi k\u1ebft th\u00fac kh\u00f3a h\u1ecdc n\u00e0y, b\u1ea1n s\u1ebd c\u00f3 hi\u1ec3u bi\u1ebft c\u01a1 b\u1ea3n v\u1ec1 Spring Framework, \u0111i\u1ec1u n\u00e0y s\u1ebd gi\u00fap b\u1ea1n tr\u1edf th\u00e0nh l\u1eadp tr\u00ecnh vi\u00ean Java th\u1ef1c th\u1ee5.<\/span><b><\/b><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Nhung_cau_hoi_Spring_Framework_thuong_gap\"><\/span><b>Nh\u1eefng c\u00e2u h\u1ecfi Spring Framework th\u01b0\u1eddng g\u1eb7p<\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><b>1. Spring Framework l\u00e0 g\u00ec?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Spring Framework l\u00e0 m\u1ed9t b\u1ed9 khung ph\u00e1t tri\u1ec3n (framework) m\u00e3 ngu\u1ed3n m\u1edf d\u00e0nh cho Java, \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 x\u00e2y d\u1ef1ng c\u00e1c \u1ee9ng d\u1ee5ng Java doanh nghi\u1ec7p. Spring cung c\u1ea5p m\u1ed9t c\u00e1ch linh ho\u1ea1t v\u00e0 m\u1ea1nh m\u1ebd \u0111\u1ec3 qu\u1ea3n l\u00fd c\u00e1c th\u00e0nh ph\u1ea7n c\u1ee7a \u1ee9ng d\u1ee5ng v\u00e0 gi\u1ea3i quy\u1ebft c\u00e1c v\u1ea5n \u0111\u1ec1 ph\u1ed5 bi\u1ebfn trong ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m.<\/span><\/p>\n<blockquote><p><em>Tham kh\u1ea3o th\u00eam: <a href=\"https:\/\/itviec.com\/blog\/framework-la-gi-top-framework-pho-bien-nhat\/\" target=\"_blank\" rel=\"noopener\"><strong>Top 15+ framework back-end, front-end v\u00e0 mobile ph\u1ed5 bi\u1ebfn nh\u1ea5t<\/strong><\/a><\/em><\/p><\/blockquote>\n<h3><b>2. Nh\u1eefng t\u00ednh n\u0103ng ch\u00ednh c\u1ee7a Spring Framework l\u00e0 g\u00ec?<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Spring Framework cung c\u1ea5p nhi\u1ec1u t\u00ednh n\u0103ng, bao g\u1ed3m Ch\u00e8n ph\u1ee5 thu\u1ed9c (Dependency Injection), L\u1eadp Tr\u00ecnh H\u01b0\u1edbng Ch\u1ee9c N\u0103ng (Aspect-Oriented Programming), Qu\u1ea3n L\u00fd Giao D\u1ecbch (Transaction Management), Model-view-controller (<a href=\"https:\/\/itviec.com\/blog\/mvc-la-gi\/\" target=\"_blank\" rel=\"noopener\">MVC<\/a>), v\u00e0 nhi\u1ec1u h\u01a1n n\u1eefa.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Tong_ket_Spring_la_gi\"><\/span><b>T\u1ed5ng k\u1ebft Spring l\u00e0 g\u00ec<\/b><b><\/b><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">T\u1ed5ng k\u1ebft, vi\u1ec7c hi\u1ec3u v\u00e0 \u00e1p d\u1ee5ng ki\u1ebfn th\u1ee9c c\u01a1 b\u1ea3n v\u1ec1 Spring Framework l\u00e0 ch\u00eca kh\u00f3a \u0111\u1ec3 x\u00e2y d\u1ef1ng \u1ee9ng d\u1ee5ng Java linh ho\u1ea1t, d\u1ec5 b\u1ea3o tr\u00ec, v\u00e0 c\u00f3 hi\u1ec7u su\u1ea5t cao. Spring Framework kh\u00f4ng ch\u1ec9 gi\u00fap gi\u1ea3i quy\u1ebft nh\u1eefng th\u00e1ch th\u1ee9c ph\u1ee9c t\u1ea1p c\u1ee7a ph\u00e1t tri\u1ec3n \u1ee9ng d\u1ee5ng doanh nghi\u1ec7p m\u00e0 c\u00f2n cung c\u1ea5p c\u00e1c module chuy\u00ean s\u00e2u cho vi\u1ec7c x\u1eed l\u00fd Data Access, ph\u00e1t tri\u1ec3n Web, v\u00e0 nhi\u1ec1u l\u0129nh v\u1ef1c kh\u00e1c.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">S\u1ef1 \u0111a d\u1ea1ng trong t\u00e0i nguy\u00ean h\u1ecdc gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean Java ti\u1ebfp c\u1eadn Spring Framework m\u1ed9t c\u00e1ch to\u00e0n di\u1ec7n v\u00e0 \u1ee9ng d\u1ee5ng ki\u1ebfn th\u1ee9c v\u00e0o th\u1ef1c t\u1ebf. H\u00e3y t\u1eadn d\u1ee5ng nh\u1eefng c\u01a1 h\u1ed9i h\u1ecdc n\u00e0y \u0111\u1ec3 ph\u00e1t tri\u1ec3n k\u1ef9 n\u0103ng v\u00e0 tr\u1edf th\u00e0nh m\u1ed9t chuy\u00ean gia v\u1eefng v\u1ec1 Spring Framework.<\/span><\/p>\n<p>&nbsp;<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" class=\"sp-no-webp wp-image-5668 aligncenter sp-no-webp entered lazyloaded\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-200x200.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-60x60.png 60w\" alt=\"robby-2\" width=\"300\" height=\"300\" data-lazy-src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png\" data-lazy-sizes=\"(max-width: 300px) 100vw, 300px\" data-lazy-srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2.png 300w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-200x200.png 200w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2015\/07\/Robby2-60x60.png 60w\" data-ll-status=\"loaded\" \/><\/figure>\n<\/div>\n<p id=\"block-bdf220a1-3635-4794-9101-81d879939b92\" class=\"has-text-align-center\" style=\"text-align: center;\"><strong>B\u1ea1n th\u1ea5y b\u00e0i vi\u1ebft hay v\u00e0 h\u1eefu \u00edch? \u0110\u1eebng ng\u1ea1i Share v\u1edbi b\u1ea1n b\u00e8 v\u00e0 \u0111\u1ed3ng nghi\u1ec7p nh\u00e9.<\/strong><\/p>\n<p id=\"block-a1315aab-406f-48df-97fc-6b9584e6e134\" class=\"has-text-align-center\" style=\"text-align: center;\"><strong>V\u00e0 nhanh tay tham kh\u1ea3o\u00a0<a href=\"http:\/\/itviec.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">vi\u1ec7c l\u00e0m IT<\/a>\u00a0\u201cch\u1ea5t\u201d tr\u00ean ITviec<\/strong>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spring Framework gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean d\u1ec5 d\u00e0ng t\u1ea1o c\u00e1c \u1ee9ng d\u1ee5ng Java Enterprise (Java EE) v\u00e0 cung c\u1ea5p m\u1ecdi th\u1ee9 b\u1ea1n c\u1ea7n \u0111\u1ec3 s\u1eed d\u1ee5ng ng\u00f4n ng\u1eef Java. L\u00e0 m\u00e3 ngu\u1ed3n m\u1edf, Spring c\u00f3 c\u1ed9ng \u0111\u1ed3ng r\u1ed9ng l\u1edbn v\u00e0 n\u0103ng \u0111\u1ed9ng, ph\u1ea3n h\u1ed3i li\u00ean t\u1ee5c d\u1ef1a tr\u00ean nhi\u1ec1u tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng th\u1ef1c t\u1ebf. [&hellip;]<\/p>\n","protected":false},"author":95,"featured_media":61311,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[109],"tags":[],"class_list":["post-61047","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuyen-mon-it"],"blocksy_meta":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec? - ITviec Blog<\/title>\n<meta name=\"description\" content=\"Spring Framework l\u00e0 c\u00f4ng c\u1ee5 c\u1ea7n thi\u1ebft \u0111\u1ec3 code Java. B\u00e0i vi\u1ebft gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean hi\u1ec3u r\u00f5 v\u1ec1 framework n\u00e0y \u0111\u1ec3 \u00e1p d\u1ee5ng v\u00e0o c\u00f4ng vi\u1ec7c th\u1ef1c t\u1ebf.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec?\" \/>\n<meta property=\"og:description\" content=\"Spring Framework gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean d\u1ec5 d\u00e0ng t\u1ea1o c\u00e1c \u1ee9ng d\u1ee5ng Java Enterprise (Java EE) v\u00e0 cung c\u1ea5p m\u1ecdi th\u1ee9 b\u1ea1n c\u1ea7n \u0111\u1ec3 s\u1eed d\u1ee5ng ng\u00f4n ng\u1eef Java. L\u00e0 m\u00e3 ngu\u1ed3n\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/\" \/>\n<meta property=\"og:site_name\" content=\"ITviec Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ITviec\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-07T04:24:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-10T08:00:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-blog-thumbnail-vippro.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"950\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tuong Uyen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ITviec\" \/>\n<meta name=\"twitter:site\" content=\"@ITviec\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tuong Uyen\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 ph\u00fat\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec? - ITviec Blog","description":"Spring Framework l\u00e0 c\u00f4ng c\u1ee5 c\u1ea7n thi\u1ebft \u0111\u1ec3 code Java. B\u00e0i vi\u1ebft gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean hi\u1ec3u r\u00f5 v\u1ec1 framework n\u00e0y \u0111\u1ec3 \u00e1p d\u1ee5ng v\u00e0o c\u00f4ng vi\u1ec7c th\u1ef1c t\u1ebf.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/","og_locale":"vi_VN","og_type":"article","og_title":"Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec?","og_description":"Spring Framework gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean d\u1ec5 d\u00e0ng t\u1ea1o c\u00e1c \u1ee9ng d\u1ee5ng Java Enterprise (Java EE) v\u00e0 cung c\u1ea5p m\u1ecdi th\u1ee9 b\u1ea1n c\u1ea7n \u0111\u1ec3 s\u1eed d\u1ee5ng ng\u00f4n ng\u1eef Java. L\u00e0 m\u00e3 ngu\u1ed3n","og_url":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/","og_site_name":"ITviec Blog","article_publisher":"https:\/\/www.facebook.com\/ITviec","article_published_time":"2024-02-07T04:24:12+00:00","article_modified_time":"2024-10-10T08:00:09+00:00","og_image":[{"width":950,"height":500,"url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-blog-thumbnail-vippro.jpg","type":"image\/jpeg"}],"author":"Tuong Uyen","twitter_card":"summary_large_image","twitter_creator":"@ITviec","twitter_site":"@ITviec","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"Tuong Uyen","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"21 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#article","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/"},"author":{"name":"Tuong Uyen","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/e97d0e359f8840eaea7dc3a96006a8d4"},"headline":"Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec?","datePublished":"2024-02-07T04:24:12+00:00","dateModified":"2024-10-10T08:00:09+00:00","mainEntityOfPage":{"@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/"},"wordCount":5390,"publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"image":{"@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-blog-thumbnail-vippro.jpg","articleSection":["Chuy\u00ean m\u00f4n IT"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/","url":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/","name":"Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec? - ITviec Blog","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#primaryimage"},"image":{"@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-blog-thumbnail-vippro.jpg","datePublished":"2024-02-07T04:24:12+00:00","dateModified":"2024-10-10T08:00:09+00:00","description":"Spring Framework l\u00e0 c\u00f4ng c\u1ee5 c\u1ea7n thi\u1ebft \u0111\u1ec3 code Java. B\u00e0i vi\u1ebft gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean hi\u1ec3u r\u00f5 v\u1ec1 framework n\u00e0y \u0111\u1ec3 \u00e1p d\u1ee5ng v\u00e0o c\u00f4ng vi\u1ec7c th\u1ef1c t\u1ebf.","breadcrumb":{"@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itviec.com\/blog\/spring-framework-la-gi\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#primaryimage","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-blog-thumbnail-vippro.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/02\/spring-framework-blog-thumbnail-vippro.jpg","width":950,"height":500,"caption":"spring framework l\u00e0 g\u00ec itviec blog"},{"@type":"BreadcrumbList","@id":"https:\/\/itviec.com\/blog\/spring-framework-la-gi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Chuy\u00ean m\u00f4n IT","item":"https:\/\/itviec.com\/blog\/chuyen-mon-it\/"},{"@type":"ListItem","position":2,"name":"Spring l\u00e0 g\u00ec? Spring Framework l\u00e0 g\u00ec?"}]},{"@type":"WebSite","@id":"https:\/\/itviec.com\/blog\/#website","url":"https:\/\/itviec.com\/blog\/","name":"ITviec Blog","description":"IT Jobs &amp; People in Vietnam","publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itviec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/itviec.com\/blog\/#organization","name":"ITviec","url":"https:\/\/itviec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","width":1800,"height":1800,"caption":"ITviec"},"image":{"@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ITviec","https:\/\/x.com\/ITviec","https:\/\/www.linkedin.com\/company\/itviec","https:\/\/www.youtube.com\/channel\/UCYthAQ3bcGr57M_ag5gHDvQ"]},{"@type":"Person","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/e97d0e359f8840eaea7dc3a96006a8d4","name":"Tuong Uyen","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2022\/10\/tuong-uyen-profile-picture-100x100.jpg","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2022\/10\/tuong-uyen-profile-picture-100x100.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2022\/10\/tuong-uyen-profile-picture-100x100.jpg","caption":"Tuong Uyen"},"url":"https:\/\/itviec.com\/blog\/author\/tuong-uyen-pikachu\/"}]}},"_links":{"self":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/61047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/users\/95"}],"replies":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/comments?post=61047"}],"version-history":[{"count":0,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/61047\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media\/61311"}],"wp:attachment":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media?parent=61047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/categories?post=61047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/tags?post=61047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}