[Training Java Spring Nội Bộ] Bài giảng training trang 1 - 40.

Do sợ đụng chạm tới phần bản quyền nên mình không post phần tài liệu lên chỉ post phần hướng bạn xem nó cùng với tài liệu training Spring (core-spring-4.2.a.RELEASE-student-handout-with-fixes.pdf) nhé, trong bài mình sẽ đi từng trang một kể cả mấy trang giới thiệu :)).

Page 1: Cover Page

Chẳng có gì quan trong cả, chỉ giới thiệu về khóa học, phiên bản khóa học, chủ đề khóa học và thời gian học.
  • Spring.
  • Chủ đề: Core Spring.
  • Thời gian: 4 ngày.
  • Mục tiêu: Xây dựng ứng dụng cấp doanh nghiệp bằng Spring.
  • Phiên bản: 4.2.a
Spring Frameworkd


Page 2: Copyright Notice

Cũng chẳng có gì, chỉ nói về bản quyền của bài training này thuộc về Pivotal Software, và website là https://pivotal.io

Page 3: Welcome Page:

Trang chào mừng bạn đến với Core Spring, một trại huấn luyện 4 ngày để huấn luyện cho các bạn cách sử dụng Spring Framework để tạo ra well-designed (một thiết kế tốt), testable (được kiểm chứng), business (có thể kinh doanh :)), application (hoặc ứng dụng).

Page 4: Logistics:

Oh giờ mới biết một buổi training thực cần có Logistics như thế này, kiểu như thông tin chi tiết về việc tổ chức, thực hiện các hoạt động có tính phức tạp (training :)) và các hậu cần cho buổi hoạt động. Công nhận chuyên nghiệp quá.
  • Participants list
  • Self introduction
  • Course registration
  • Courseware
  • Internet access
  • Phones on silent
  • Working hours
  • Lunch and breaks
  • Toilets/Restrooms
  • Fire alarms
  • Emergency exits
  • Other questions?
Thôi bỏ qua đi tiếp :>>

Page 5: How you will benefit? (bạn sẽ đặt được lợi ích gì?)

  • Học cách sử dụng Spring cho web và cac ứng dụng khác (web application).
  • Có được kinh nghiệm thực hành thực tế.
  • Trong bài training sẽ có một nửa là lý thuyết, một nửa là thực hành.
  • Tiếp cận với các chuyên gia của Pivotal và Spring (chắc là thông qua mail, mạng xã hội, blog, không biết có phone không nhỉ call khủng bố cái :)).

    Page 6: Covered in this section. (Các nội dung chính trong phần này.)

    • Agenda. (nội dụng các ngày học)
    • Spring và Pivotal

      Page 7: Course Agenda Day 1 (Chương trình học ngày 1).

      • Giới thiệu về Spring.
      • Sử dụng Spring để cấu hình ứng dụng.
      • Hiểu về hình phức tiêm phụ thuộc vào cơ bản của Java (Java-based dependency injection).
      • Dependency injection trong Java-based.
      • Dependency injection trong Annotation-based.
      • Dependency injection trong XML-based
      *Note: Dependency injection là một từ chuyên ngành nên mình giữ nguyên vì dịch sang tiếng viết nghe mà rợn người "tiêm chích sự tin tưởng" để hiểu nó là gì bạn có thể xem thêm bài viết hiểu về Dependency Injection thông qua ví dụ thực tế.


      Page 8: Course Agenda Day 2 (Chương trình học ngày 2).

      • Hiểu về vòng đời của bean.
      • Kiểm định một chương trình Spring cơ bản sử dụng nhiều profile.
      • Thêm các hành vi vào ứng dụng bằng aspects.
      • Giới thiệu truy xuất dữ liệu bằng Spring.
      • Đơn giản hóa JDBC cơ bản để truy xuất dữ liệu.

      Page 9: Course Agenda Day 3 (Chương trình học ngày 3).

      • Driving database transaction in a Spring environment.
      • Cách hoạt động của các tiến trình cơ sở dữ liệu (database transaction) trong môi trường Spring.
      • Giới thiệu về object-to-relational mapping (ORM).
      • Làm việc với JPA trong môi trường Spring.
      • Kiến trúc ứng dụng web hiệu quả.
      • Bắt đầu với Spring MVC.

      Page 10: Course Agenda Day 4 (Chương trình học ngày 4).

      • Khởi đầu một dự án mới nhanh chóng với Spring Boot.
      • Bảo mật ứng dụng web với Spring Security.
      • Thực hiện hệ thống REST với Spring MVC.
      • Microservices and Cloud Native Application với Spring Cloud.

      Page 11: Covered in this section. (Các nội dung chính trong phần này.)

      • Agenda. (nội dụng các ngày học)
      • Spring và Pivotal (vãi privotal = then chốt đọc tới đây mới biết chả biết nó có chơi chữ không nữa tự nhiên ghi vây đếch hiểu gì hết.)

      Page 12: Spring and Pivotal

      Nguồn gốc của Spring, công ty đứng đằng sau Spring.
      • Xây dựng bởi VMWare năm 2009
      • Chuyển giao cho liên doanh Pivotal năm 2013
      Spring là chìa khóa chiến lược cho big-data và cloud của Pivotal's.
      • Ảo hóa (virtualize) các ứng dụng Java của bạn (đếch hiểu nói gì luôn.)
        • Giảm chi phí về bản quyền.
        • Triển khai cá nhân (private), công cộng (public), hybrid clouds (dạng bao gồm nhiều cloud có cả 2 thằng public và private cloud, hoặc nối liên hệ giữa chúng).
      • Phân tích thời gian thực (Real-time analytics)
        • Spot trends as they happen.
        • Spring Data, Spring Hadoop, Spring XD & Privotal HD. (hình như nó chôm chỉa ở đâu về vậy... mấy cái này nghe quen quá).


      Page 13: Thế giới Pivotal (vãi hàng chú Pivotal tự tin quá gom một mớ công nghệ của người khác vào tay chú).

      Trang này cũng không có gì hình mính họa giới thiệu về Cloud Foundry, Development, Big Data Suite, và các các thành phần trong đó, cụ thể là:
      • Cloud Foundry
        • Cloud Independence
        • Microservices
        • Continuous Delivery
        • Dev Ops
      • Development
        • Frameworks
        • Services
        • Analytics
      • Big Data Suite
        • High Capacity
        • Real-time Ingest
        • SQL Query
        • Scale-out Storage

      Page 14: Spring Projects

      Giới thiệu các dự án với Spring trong Pivotal, quảng cáo đó mớ, thôi nhiều qua làm biếng gõ các bạn xem trong tài liệu nhé. A trên internet có mấy tấp hình hay hay chôm về để tạm :))

      Spring Project Icons

      Spring IO Platform

      Page 15: Covered in this section.

      • Agenda. (nội dụng các ngày học)
      • Spring và Pivotal
      Let's get on with the course...!
      Hãy về với khóa học :)) hài VL

      Page 16: Tổng Quan về Spring Framework.

      Giới thiệu Srping trong các kiến trúc ứng dụng doanh nghiệp (Enterprise Application Architecture).
      Spring là gì? Tại sao chúng ta sử dụng nó.


      Page 17: Mục tiêu.

      Sau khi hoàn thành bài học này bạn sẽ biết được:
      • Định nghĩa về Spring Framework
      • Hiểu Spring dùng để làm gì?
      • HIểu tại Spring lại thành công.
      • Giải thích cách mà nó phù hợp với bạn.

      Page 18: Chủ đề chính trong phần bài này.

      • What is the Spring Framework?
      • Spring is a Container.
      • Lịch sử của Spring.
      • Spring dùng để làm gì?

      Page 19: Spring Framework là gi?

      Spring là một mã nguồn mở (open source), nhẹ, là một thùng chứa (container) và là nền tảng (Framework) để xây dựng các ứng dụng Java cấp doanh nghiệp (Java Enterprise Application).
      • Open Source.
      • Lightweight.
      • Container.
      • Framework.

      Page 20: Open Source (mã nguồn mở).

      • Spring binary (nhị phân) và source code thì miễn phí để sử dụng.
      • Apache 2 license (bảng quyền Apache 2).
      • Code thì được cung cấp miễn phí tại:
        • https://github.com/spring-projects/spring-framework/
      • Binaries thì được cung cấp tại Maven Central
        • http://mvnrepository.com/artifact/org.springframework
      • Tài liệu thì được cung cấp tại:
        • http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/
      Note: Việc sử dụng tính bắc cầu phụ thuộc các hệ thống quản lý (Maven, Gradle, Ant/Ivy) thì được khuyến khích cho bất kỳ ứng dụng nào của Java (ý là thay vì viết tất cả đơn giản chỉ là Java đơn thuần thì việc sử dụng các hệ thống kiến trúc quản lý như là Maven, hoặc các Framework như là Spring thì được khuyến khích sử dụng trong lập trình Java ấy mờ...).

      Page 21: Lightweight (nhẹ).

      • Các ứng dụng Spring thì không yêu cầu  ứng dụng máy chủ Java EE (Java EE application server (Java EE là gì?)).
        • Nhưng chúng có thể được triển khai trên một Java EE application server. (but they can be deployed on one)(éo hiểu)
      • Spring thì không xâm lược.
        • Không yêu cầu bạn phải kế thừa(extend) từ lớp Frameword (framework classes), không yêu cầu bạn thừa hưởng(implement) giao diện framework (framework interface) để sử dụng Spring.
        • Bạn có thể viết code như là POJOs.
      • Spring jars thì tương đối nhỏ.
        • Spring jars sử dụng trong khóa học này thì nhỏ hơn 8 MB (chắc chỉ có 1 MB thôi).

      Page 22: Container (thùng chứa :)).

      • Spring phục vụ như là một thùng chứa đầy đủ các thành phần cần thiết(súng, ống, đạn, dược) cho ứng dụng của bạn.
        • Ứng dụng của bạn không cần quan tâm về vấn đề tìm kiếm hoặc kết nối các thành phần lại với nhau. (ví như súng ống lên đạn tự động bạn chỉ việc cầm và bóp cò nhưng định chết hay ta chết thì còn chưa rõ).
      • Spring khởi tạo và dependency injects(tiêm sự tin tưởng) và ứng dụng của bạn (tức là súng, ống, đạn, dược được cung cấp miễn phí).
        • Phục vụ bạn như một người quản lý trong suốt vòng đời của bạn (tức là khi bạn và địch bắn nhau, bạn chết, nó hết phục vụ).

      Page 23: Framework (nền tảng).

      Các ứng dụng doanh nghiệp luôn phải đối phó với một loặt các vấn đề về công nghệ và nguồn lục, ví dụ như:
      • JDBC, JMS, AMQP, Transactions, ORM/JPA, NoSQL, Security, Web, Tasks, Scheduling, Mail, Files, XML/JSON, Marshalling, Remoting, REST Services, SOAP Services, Mobile, Social,...
      (chắc ý của pác ấy là một doanh nghiệp vừa mới hét lên rằng "tao có ứng dụng tốt nhất, trên công nghệ tiên tiết nhất" ngày hôm qua một công nghệ mới ra đời và nó là best, thế là cái ứng dụng của doanh nghiệp ấy second, và anh ấy muốn best lại thì phải đua theo công nghệ mới mà nếu không anh sẽ bị lạc hậu, nhưng để đu theo công nghệ đòi hỏi anh phải tài chính cũng chính là nguồn lực thể thây đổi thiết bị phù hợp với công nghệ, để đào nhân viên, để tuyển dụng nhân viên biết công nghệ mới v.v.v.... nhưng với Spring thì anh không cần lo lằng :>> cái này mình vậy).

      Spring cung cấp một lớp nền tảng (framework classes) để đơn giản hóa cách làm việc với các công nghệ, kỹ thuật cấp dưới.
      (vãi chôm của người ta bỏ vào của mình rùi lại nói người ta cấp dưới tự tin vãi.)

      Page 24: Chủ đề chính trong phần bài này.

      • What is the Spring Framework?
      • Spring is a Container.
      • Lịch sử của Spring.
      • Spring dùng để làm gì?

      Page 25: Application Configuration (Cấu hình ứng dụng).

      Một hệ thống ứng dụng điển hình bao gồm một số bộ phận làm việc với nhau để thực hiện một xử lý gì đó (to carry out a use case).


      Có thể hiểu như thế này:
      • "Transer Service" (dịch vụ vận chuyển) là một bộ phận để tiếp nhận và chuyển các yêu cầu, 
      • "Transer Repository" và "Account Repository" là bộ phân để chứa hoặc tiếp nhập các yêu cầu do "Transer Service" chuyển tới và mỗi bộ phần này sẽ có chức năng riêng để xứ lý yêu.
      • Ví như khi yêu cầu chuyển tới "Transfer Repository" thì có thể yêu cầu này sẽ được chờ và chuyển tới một bộ phận khác để xử lý chẳng hạn.
      • Còn yêu cầu chuyển tới "Account Repository" thì nó sẽ xử lý là chuyển tiền vào tài khoản của một account nào đó như ví dụ ở trang 25.

      Page 26: Example Money Transfer System.


      Ok đây là Sequence Diagram (biểu đồ tuần tự) có hai object hoặc gọi là lớp cũng cũng được không quan trọng, tạm giải thích sơ thế này:
      • Đầu tiên một transer(giao dịch) được chuyển tới [TransferService], giao dịch là có 300.00 (đô hay việt gì đó) được chuyển vào account(tài khoản) 1 và 2.
      • Khi [TranserService] nhận được yêu cầu này nó sẽ yêu cầu [AccountRepository] load account 1 đầu tiên, và [AccountRepository] tạo ra một [Account 1] (hiểu như là một cái gì đó có thể tương tác với account 1).
      • Sau đó [AccountRepository] báo với [TransferService] là đã load account 1 xong rồi và trả về Account 1 cho [TransferService], mà thông quá đó [TransferService] sẽ xử lý tiếp với Account 1 mà không phải thông qua [AccountRepository] nữa.
      • [AccountRepository] sẽ yêu cầu load account 2 và quá trình xảy ra giống với account 1.
      • Tiếp theo [TransferService] sẽ đụa vào thông tin account 1 từ [AccountRepository] trả về và biết rằng thằng này dùng thẻ Debit và sẽ sử dụng phương thức debit để chuyển tiền vào Account 1 mà không phải thông qua [AccountRepository] nữa.
      • Tương tự [TransferService] biết t hằng account 2 sử dủng thẻ Credit nó sẽ dụng phương thức credit để chuyển tiền vào thẻ cho Account 2.
      • Cuối  cùng [TransferService] cập nhập lại cho account 1 và account 1 hai vào [AccountRepository]  với một giao dịch đã được hiện.
      • Cuối cùng [TransferService] sẽ thông báo xác nhận lại rằng tiến trình transer đã kết thúc.

      Ở đây điểm ta cần chú ý là mỗi thành phần đảm nhận đúng vai trò của nó, [AccountRepository] chỉ có nhiệm vụ đưa các [Account] cho [TranserService] chứ không có nhiệm vụ tiếp nhận các yêu cầu chuyển tiền, mà nhiệm vụ chuyển tiền được giao cho [TranserService], nên trong biểu đồ ta thấy việc chuyển tiền (debit và credit) là do [TranserService] thực hiện, điểu giúp ta thấy rõ được định nghĩa "Một hệ thống ứng dụng điển hình bao gồm một số bộ phận làm việc với nhau để thực hiện một xử lý gì đó (to carry out a use case)." như đã nêu ở trên.

      Page 27: Spring's Configuration Support (Spring's hỗ trợ cấu hình).

      Spring hỗ trợ cách đễ hỗ trợ việc lắp ráp một hệ thống từ các bộ phận của nó.
      • Trong đó bạn sẽ không cần lo lắng về vệc các bộ phận tìm kiếm nhau (chúng tự tìm :)) troll đó).
      • Bấy kỳ bộ phận nào cũng có thể dễ dàng được thay đổi.

      Page 28: Money Transfer System Assembly (Mô hình lắp ráp hệ thống chuyển tiền).


      Trong hình vẽ trên ta có thế thấy rõ được Assembly hoạt đông như thế nào và nó nằm ở đâu. Và đoạn code bên dưới nêu tả sơ lượt cách sử dụng Assembly.

      Tuy nhiên ở đây tôi có một câu hỏi tại sao "lại gọi JdbcAccountRepository là Part 1 và TransferServiceImpl, bản thân tôi cũng có chút kiến thức bên đồ họa và theo phản xạ trên xuống tôi sẽ luôn điền Part 1 rồi tới Part 2, tương tự như trong code tại sao service được tao sau repository trong khi đó ta biết nếu theo thứ tự thì thông thường sẽ service sẽ thường được tạo trước, tôi đã hiểu lầm ở đây hay việc sắp xếp như vậy có mục đích gì? hay có lý do gì để gọi như vậy?".  

      Khi thảo luận với một bạn thì cho rằng thì nên tạo ra một kết nối  trước để service có thể sử dụng, khá hợp lý tuy nhiên tôi vẫn cảm thấy có một vấn đề gì đó ở đây mà không nghĩ ra được. Bạn có có hiểu biết về phần này thì cho tôi một góp ý hay một câu trả lời nhé, thực sự tôi không nghĩ ra một câu trả lời hợp lý được.

      Page 24: Part are Just Plain Old Java Ojects (POJOs).

      Ý ở đây là muốn nói các thành phần trên là các đội tượng Java thuần túy (POJOs), hãy xem đoạn code mô tả dưới đây bạn sẽ hiểu tại sao:




      Page 30: Swapping Out Part Implementations (Triển khai việc thay thế các thành phần).

      Phần này ý nó muốn mô tả cách mà việc chuyển đổi được triển khai như thế nào có dễ dàng như nó đã quản cáo hay không? Hãy nhìn vào hình bên dưới bạn sẽ hiểu tất cả :))


      Như bạn thấy trong hình bạn chỉ việc thay lớp "JdbcAccountRepository" thành lớp "StubAccountRepository" dùng để Unit Testing vào là được.

      Page 31: Chủ đề chính trong phần bài này.

      • What is the Spring Framework?
      • Spring is a Container.
      • Lịch sử của Spring.
      • Spring dùng để làm gì?

      Page 32: Tai seo Spring thành công? Hãy xem qua tóm tắt lịch sử của Java.

      Những năm đầu tiên
      • 1995: Java được giới thiệu, Applets trở nên phổ biến.
      • 1997: Servlets được giới thiệu.
      • - Mang lại sự hiệu quả, các trang web động (dynamic web pages) được trở nên phổ biến.
      • 1999: JSP được giới thiệu.
      • - Mang lại sự hiểu quả, các trang web động (dynamic web pages) trở nên dễ dàng hơn.

      Các câu hỏi về ứng dụng "doanh nghiệp" (enterprise application) được nảy sinh. Làm thể để để quản lý ứng dụng Servlets/JSP?
      • Persistence? - Sự ổn định.
      • Transactions? - Sự giao tác.
      • Security? - Sự bảo mật.
      • Business Logic? -Sự xử lý luận lý, hay các phương pháp thực hiện.
      • Messaging? - Dạng như Mail, Chat gì đó :))

      Page 33: Giới thiệu về J2EE và EJB.

      Câu trả lời cho các vấn đề trên của Java là: J2EE.
      • Năm 1992: J2EE được giới thiệu:
        • Java Beans (EJB) với các tính năng cho doanh nghiệp (Enterprise).
        • Nó là câu trả lời cho persistence, transactions, business logic, security,...

      Tuy nhiên EJBs cung cấp giải pháp có vấn đề.
      • Khó khăng để code.
        • Phải extend/implement các classes/interfaces chỉ định.
        • Yêu cầu các mô hình lập trình phức tạp.
      • Khó khăn để unit test.
        • Chi phí thực thi cao.
        • Phải có ứng dụng server (application server), nhân sự chuyên sâu.

      Page 34: Spring ra đời (anh ấy đã được sinh để cứu vớt Java Enterise).

      Rod Johnson xuất bản các để lập trình J2EE mà không cần EJB.

      Năm 2004: Spring Framework 1.0 được ra đời.
      • Champions dependency injection. (chả biết dịch sao chắc đại lại như kiểu đoạt giải về triển khai và ứng dụng dependency injection.)
      • Khuyến khích sử dụng POJOs.
      • Sử dụng tập XML để xây dựng cấu hình ứng dụng.
      • Trở nên phổ biến một cách nhanh chóng và thay thế cho EJB.

      Page 35: Lịch sử Spring Framework.

      • Spring 1.0 (2004) (trang trước)
      • Spring 2.0 (2006)
        • XML Simplification, async JMS, JPA, AspectJ support.
      • Spring 2.5 (2007, currently 2.5.6)
        • Requires Java 1.4+ and support JUnit 4.
        • Annotation DI, @MVC controllers, XML namespaces.
      • Spring 3.x (3.2 released Dec 2012)
        • Env. + Profiles, @Cacheable, @EnableXXX...
        • Supports Java 7, Hibernate 4, Servlet 3.
        • Requires Java 1.5 + and JUnit 4.7+
        • REST Support, JavaConfig, SpEL, more annotations.
      • Spring 4 (released Dec 2013)
        • Support for Java 8, @Conditional, Web-sockets.

      Page 31: Chủ đề chính trong phần bài này.

      • What is the Spring Framework?
      • Spring is a Container.
      • Lịch sử của Spring.
      • Spring dùng để làm cái gì?

      Page 37: Spring được dùng để làm cái gì?

      Spring cung cấp hạ tần toàn diện để hỗ trợ phát triển ứng dụng Java cấp doanh nghiệp.
      • Spring với các hệ thống ống nước, ý nó là nó đã lo các phần liên kết lắp ráp (assembly) rùi. (để bữa nào anh xây dựng tường nhà nữa kết hợp với ống nước thì tuyệt)
      • Vì thế bạn có thể trung vào giải quyết các vấn đề thuộc tầng xử lý thao tác (domain problem).
      • (domain problem = business problem tương tự business logic = domain logic *vãi cả hàng tìm nghĩa từ này muốn khùng luôn, ghét mấy thằng dạy học tiếng anh mà còn hay chơi chữ).

      Spring được dùng để xây dựng các ứng dụng cấp doanh nghiệp với các tuyệt vời là:
      • Web Interface
      • Messaging
      • Peristence
      • Batch
      • Integration

      Page 38: The Current World (thế giới hiện tại).

      Spring thì không đơn giả là để thay thế J2EE/EJB
      • Hiện nay các mô hình phát triển ứng dụng khác nhau đã hơn 2.000 mô hình. (Modern application development challenges are different today than 2000. "không hiểu rõ ý lắm, không biết dịch đúng hay sai nên để nguyên câu".)
      Spring thì vẫn luôn đổi mới.
      • Web: AJAX, WebSockets, REST, Mobile, Social.
      • Data: NoSQL, Big Data, Stream processing.
      • Clound: Distributed systems, Microservices.
      • Productivity: Spring Boot, Spring XS.
      • Và nhiều nhiều nữa...

      Page 39: More on Spring's Ecosystem (xem nhiều hơn tại hệ sinh thái Spring).

      Truy cập: http://spring.io/project


      Page 40: Lab.

      • Xem tại:



      The End.
       
      Oa... xong phần 1, còn hơn 900 trang nữa, đây sẽ là loạt bài dài nhất mà tôi từng viết, đụng tới cơm áo gạo tiền thì đúng là có khác :))... có động lực hẳn ra :>> mà cũng làm tôi bỏ mấy cái project TT_TT rùi hơi nản thôi kệ từ từ quay lại sau cũng không gấp.

      Hồi đó cũng có tâm huyết viết mấy bài serious dài như Fast & Surious vậy :)) mà nản thấy viết bài dài  mờ chả ma nào xem nản TT_TT, lâu dần lượt xem cũng lên tới cả ngàn nhưng chả thấy được cái like nào TT_TT nản tiếp, nói vậy thôi còn bận việc cty với việc khác nữa, nên đành chuyển hướng lâu lâu thấy lại cái gì hay thấy cái gì hay hay thì viết ngắn ngọn lại thôi :>> vừa ôn tập vừa chia sẻ vậy cũng như thỏa mãn :>> sở thích riêng.



      Writer: +Bui Ngoc Son







      No comments:

      Post a Comment