Mình không muốn giới thiệu Spring framework là cái gì bởi vì cái này có đầy rẫy trên mạng, mang tính lý thuyết nhiều quá nên ở bài viết này, mình chỉ tập trung vào những điểm cốt lõi, cần thiết để các bạn có thể làm cho Spring nói “Chào thế giới”, 😀
Spring framework sử dụng ý tưởng của Dependency Injection để hiện thực framework của mình. Đó là lý do tại sao mình lại viết bài Dependency Injection trước khi đến bài viết này 😀
Như các bạn đã biết, ý tưởng của Dependency Injection là bạn không phụ thuộc vào ai cả, khi cần ai thì bạn gọi người đó. Nhưng câu hỏi đặt ra là người các bạn gọi từ đâu mà có? Nói gần gũi với Java hơn là đối tượng các bạn cần được chứa ở đâu?
Trong Spring framework, Spring sẽ có một container để chứa tất cả các đối tượng mà các bạn cần, tiếng Anh gọi là Spring container. Khi các bạn cần đối tượng nào, bạn chỉ cần gọi Spring cung cấp cho các bạn nếu nó có, nó không có thì cũng chịu, 😀
OK, thực tế cái lý thuyết trên như thế nào, mình sẽ làm một cái demo cho các bạn dễ nắm nhé!
Đầu tiên, chúng ta cần tạo một project để làm việc. Các bạn có thể dùng IDE nào mà các bạn thích: Eclipse, Netbean, IntellJ IDEA đều được.
Hồi trước mình toàn dùng Eclipse nhưng sau này đi làm, làm nhiều với Spring nên chuyển qua dùng Spring Tool Suite luôn. IDE này core là của Eclipse nhưng có sẵn nhiều thứ hỗ trợ cho Spring nên cũng tiện để dùng.
Đầu tiên, hãy tạo mới một Maven project nhé các bạn!
Mình sẽ sử dụng Java 17 cho project này:
1 2 3 4 |
<properties> <maven.compiler.target>17</maven.compiler.target> <maven.compiler.source>17</maven.compiler.source> </properties> |
Để có thể sử dụng được Spring, chúng ta cần phải thêm dependency của nó. Hãy mở tập tin pom.xml trong thư mục project của các bạn rồi thêm những dòng sau vào nhé:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.huongdanjava</groupId> <artifactId>spring-helloworld</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.0.2</version> </dependency> </dependencies> </project> |
Bây giờ, để Spring có thể nói “Chào thế giới”, chúng ta cần một đối tượng có thể làm được điều đó trước.
Nội dung của class SayHello như sau:
1 2 3 4 5 6 7 8 |
package com.huongdanjava.springhelloworld; public class SayHello { public void say() { System.out.println("Hello World!"); } } |
Sau đó, chúng ta sẽ thêm đối tượng này vào Spring container.
Spring đang quản lý các đối tượng bằng 2 cách, cách thứ nhất là bằng một tập tin XML và cách thứ hai là bằng các Annotation. Trong bài viết này mình chỉ đề cập đến XML thôi, còn Annotation sẽ đề cập trong các bài viết khác các bạn nhé!
OK, bây giờ các bạn hãy tạo một tập tin XML nằm trong thư mục /src/main/resources của project nhé! Các tập tin cấu hình của Spring nên nằm ở đây.
Nội dung của tập tin spring.xml như sau
1 2 3 4 5 6 7 8 9 |
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="hello" class="com.huongdanjava.springhelloworld.SayHello"> </bean> </beans> |
Với khai báo trên, Spring sẽ tự động tạo mới một đối tượng cho class SayHello, gán cho nó một id và chứa nó trong khung chứa của mình.
Như các bạn thấy, Spring coi các đối tượng của chúng ta là những beans, mỗi bean sẽ có một id riêng và bạn sẽ dùng id này để gọi đến đối tượng mà các bạn cần.
Hãy xem Spring nói “Chào thế giới” như thế nào nhé!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package com.huongdanjava.springhelloworld; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Application { public static void main(String[] args) { // Call Spring container ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); // Request to get SayHello object SayHello sayHello = (SayHello) context.getBean("hello"); // Call any methods in SayHello object sayHello.say(); } } |
Kết quả:
Đức
Các bài viết của anh rất hay và dễ hiểu. Em xin cám ơn anh nhiều, chúc anh nhiều sức khỏe và công việc tốt ạ!
Trường
Anh ơi em vẫn chưa hiểu, sao không viết SayHello sayHello = new SayHello(); sayHello.say(); luôn cho nhanh hả anh. Anh giải thích cho em tại sao phải add vào Spring đi ạ
Khanh Nguyen
Để biết lý do tại sao, anh nghĩ em nên đọc kỹ bài viết về Dependency Injection https://huongdanjava.com/hieu-ve-dependency-injection.html
Trịnh Đức Minh
Bài viết ngắn gọn,xúc tích lắm anh.
Giang
Hay lắm anh! Rất bổ ích mong anh viết thêm nhiều bài về Spring nữa
Khanh Nguyen
Thanks bạn! Tiếp tục ủng hộ Hướng Dẫn Java nhé!
Thanh
Khi minh run Application thi console bao loi Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
Khanh Nguyễn
Lỗi này liên quan đến Logging, bạn tạo Maven project như thế nào thế?
Nếu được, hãy gửi project đó cho mình để mình support bạn tốt hơn.
Phong
Hi a,
em bị lổi ở dòng
ApplicationContext context = new ClassPathXmlApplicationContext(“spring.xml”);
mong a giúp cho
Khanh Nguyễn
Cụ thể lỗi là gì em?
long
mấy bài anh viết ngắn nhưng chất không tưởng,hy vọng anh co thêm nhiều bài viết Java và Spring,như Spring security chẳng hạn 😀
Khanh Nguyễn
Thanks bạn.
Thanh
cho em hỏi mấy cái xmlns là anh tự gõ bằng tay hay sao thế?
Khanh Nguyễn
Ý bạn là cái nào nhỉ?
Thanh
beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd“>
là mấy cái này nè anh, nó tự sinh hay phải gõ tay. Em nhìn có vẻ khó nhớ quá
Khanh Nguyễn
Mấy cái này em copy rồi dùng lại thôi, không cần phải gõ tay đâu em. 😀
Thanh
chỗ này đơn giản chỉ có vài cái, còn mấy cái project em thấy thì có rất nhiều cái khai báo xmlns này. Em thắc mắc là sài cái gì thì phải khai báo cái này, làm sao để biết khi nào mình cần khai báo mấy thứ này, chứ copy lỡ copy có khi thiếu có khi thừa.
Khanh Nguyễn
Đúng rồi em, cần dùng cái gì thì mới khai báo vào. Ở đây, anh chỉ dùng tag bean của Spring nên anh chỉ khai báo nhiêu đó thôi. Thật ra, đây là những XML namespaces (em có thể tìm hiểu thêm ở đây). Ví dụ, nếu anh có dùng Spring AOP trong tập tin cấu hình của Spring nữa thì cần phải khai báo thêm xmlns:aop=”http://www.springframework.org/schema/aop”.
giặc núi
anh ơi, anh viết nhiều nữa đi anh, em cần nhưng kiến thúc bổ ích như anh.
Quân
Bài viết của anh khá hay, anh hãy viết thêm nhiều bài về spring nữa nhé!!! Cảm ơn anh rất nhiều
Khanh Nguyễn
Thanks bạn, có thắc mắc gì cứ hỏi nhé!