「Spring Boot #5」 Component Scan là gì?

Chúng tôi rất vui mừng được chia sẻ kiến thức sâu sắc về từ khóa Boot time scan la gi và hi vọng rằng nó sẽ hữu ích cho các bạn đọc. Bài viết tập trung trình bày ý nghĩa, vai trò và ứng dụng của từ khóa trong việc tối ưu hóa nội dung trang web và chiến dịch tiếp thị trực tuyến. Chúng tôi cung cấp các phương pháp tìm kiếm, phân tích và chọn lọc từ khóa phù hợp, kèm theo các chiến lược và công cụ hữu ích. Hi vọng rằng thông tin chúng tôi chia sẻ sẽ giúp bạn xây dựng chiến lược thành công và thu hút lưu lượng người dùng. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi blog của chúng tôi để cập nhật kiến thức mới nhất.

Nguồn: loda.me

Bạn Đang Xem: 「Spring Boot #5」 Component Scan là gì?

Giới thiệu

Trong bài trước tôi đã đề cập tới 2 trong số 3 Annotation cơ bản trong thiết kế Layer của Spring Boot.

  1. [「Spring Boot #4」@Component vs @Service vs @Repository][link-spring-boot-4]

Trong bài hôm này, tất cả chúng ta sẽ tìm hiểu thêm về kiểu cách Spring Boot tìm kiếm Bean trong project của bạn ra sao.

Cấu hình thiết lập

<?xml version=”1.0″ encoding=”UTF-8″?> <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”> <modelVersionvàgt;4.0.0vàlt;/modelVersionvàgt; <packagingvàgt;pomvàlt;/packagingvàgt; <parentvàgt; <groupIdvàgt;org.springframework.bootvàlt;/groupIdvàgt; <artifactIdvàgt;spring-boot-starter-parentvàlt;/artifactIdvàgt; <versionvàgt;2.0.5.RELEASEvàlt;/versionvàgt; <relativePath /> <!- lookup parent from repository -> </parentvàgt; <groupIdvàgt;me.loda.springvàlt;/groupIdvàgt; <artifactIdvàgt;spring-boot-learningvàlt;/artifactIdvàgt; <versionvàgt;0.0.1-SNAPSHOTvàlt;/versionvàgt; <namevàgt;spring-boot-learningvàlt;/namevàgt; <descriptionvàgt;Everything about Spring Bootvàlt;/descriptionvàgt; <propertiesvàgt; <java.versionvàgt;1.8vàlt;/java.versionvàgt; </propertiesvàgt; <dependenciesvàgt; <!-spring mvc, rest-> <dependencyvàgt; <groupIdvàgt;org.springframework.bootvàlt;/groupIdvàgt; <artifactIdvàgt;spring-boot-starter-webvàlt;/artifactIdvàgt; </dependencyvàgt; </dependenciesvàgt; <buildvàgt; <pluginsvàgt; <pluginvàgt; <groupIdvàgt;org.springframework.bootvàlt;/groupIdvàgt; <artifactIdvàgt;spring-boot-maven-pluginvàlt;/artifactIdvàgt; </pluginvàgt; </pluginsvàgt; </buildvàgt; </projectvàgt;

Component Scan

Trong [bài 1][link-spring-boot-1] tôi có đề cập một lần về việc Spring Boot khi chạy sẽ dò tìm toàn bộ các Class cùng cấp hoặc ở trong các package thấp hơn và tạo ra Bean từ các Class tìm thấy.

Thời điểm hiện nay tất cả chúng ta sẽ nói sâu hơn một tí!

Thử ví dụ này nhé:

Tất cả chúng ta có một project có cấu trúc thư mục như này:

Tôi tạo ra 2 Bean:

  1. Girl. Nằm cùng package với App
  2. OtherGirl. Nằm ở package con others. others cùng cấp với App

Xem Thêm : Regardless Of Whether Là Gì, Regardless Of Có Nghĩa Là Bất

Girl.java

@Component public class Girl { @Override public String toString() { return “Girl.java”; } }

OtherGirl.java

@Component public class OtherGirl { @Override public String toString() { return “OtherGirl.java”; } }

App.java

@SpringBootApplication public class App { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(App.class, args); try { Girl girl = context.getBean(Girl.class); System.out.println(“Bean: ” + girl.toString()); } catch (Exception e) { System.out.println(“Bean Girl không tồn tại”); } try { OtherGirl otherGirl = context.getBean(OtherGirl.class); if (otherGirl != null) { System.out.println(“Bean: ” + otherGirl.toString()); } } catch (Exception e) { System.out.println(“Bean Girl không tồn tại”); } } }

Chạy lớp học:

Bean: Girl.java Bean: OtherGirl.java

Kết quả in ra màn hình hiển thị là cả hai bean Girl và OtherGirl đều được tạo ra trong Context.

Điều này chứng tỏ Spring Boot đã đi tìm các Bean bên cạnh class App và những package con bên cạnh App

Component Scan

Trong trường hợp bạn muốn tuỳ chỉnh cấu hình cho Spring Boot chỉ tìm kiếm các bean trong một package nhất định thì có những cách sau đây:

  1. Sử dụng @ComponentScan
  2. Sử dụng scanBasePackages tromg @SpringBootApplication.

Cách 1: @ComponentScan

Xem Thêm : Ăn keto là gì và chế độ ăn này có thực sự hiệu quả không?

Sửa file App.java thành:

@ComponentScan(“me.loda.spring.componentscan.others”) @SpringBootApplication public class App { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(App.class, args); try { Girl girl = context.getBean(Girl.class); System.out.println(“Bean: ” + girl.toString()); } catch (Exception e) { System.out.println(“Bean Girl không tồn tại”); } try { OtherGirl otherGirl = context.getBean(OtherGirl.class); if (otherGirl != null) { System.out.println(“Bean: ” + otherGirl.toString()); } } catch (Exception e) { System.out.println(“Bean Girl không tồn tại”); } } }

Cách 2: scanBasePackages

@SpringBootApplication(scanBasePackages = “me.loda.spring.componentscan.others”) public class App { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(App.class, args); try { Girl girl = context.getBean(Girl.class); System.out.println(“Bean: ” + girl.toString()); } catch (Exception e) { System.out.println(“Bean Girl không tồn tại”); } try { OtherGirl otherGirl = context.getBean(OtherGirl.class); if (otherGirl != null) { System.out.println(“Bean: ” + otherGirl.toString()); } } catch (Exception e) { System.out.println(“Bean Girl không tồn tại”); } } }

Cả hai cách đều cho kết quả in ra màn hình hiển thị như sau:

Bean Girl không tồn tại Bean: OtherGirl.java

Lúc này, Spring Boot chỉ tìm kiếm các bean trong package others mà thôi. Nên lúc lấy ra Girl thì nó không tồn tại trong Context.

Multiple package scan

Chúng ta có thể cấu hình cho Spring Boot Tìm kiếm các Bean ở nhiều package khác nhau bằng phương pháp:

@ComponentScan({“me.loda.spring.componentscan.others2″,”me.loda.spring.componentscan.others”})

hoặc

@SpringBootApplication(scanBasePackages = {“me.loda.spring.componentscan.others”, “me.loda.spring.componentscan.others2”})

Kết

Đây là một nội dung bài viết trong [Series làm chủ Spring Boot, từ zero to hero][link-series-spring-boot] [link-series-spring-boot]: https://loda.me/spring-boot-0-series-lam-chu-spring-boot-tu-zero-to-hero-loda1558963914472

Như mọi khi, [code được up tại Github][link-github] <i class=”fab fa-github”></ivàgt; [link-spring-boot-1]: https://loda.me/spring-boot-1-huong-dan-component-va-autowired-loda1557412317602 [link-spring-boot-4]: https://loda.me/spring-boot-4-component-vs-service-vs-repository-loda1557627097246 [link-github]: https://github.com/loda-kun/spring-boot-learning

You May Also Like

About the Author: v1000