@ComponentScan bảo Spring quét package tìm class gắn stereotype (@Component, @Service, @Repository, @Controller, @Configuration) để đăng ký thành bean.
Base package mặc định: package chứa chính class khai báo annotation. Vì @SpringBootApplication đã gộp sẵn @ComponentScan, Spring quét từ package của lớp main trở xuống — nên đặt lớp @SpringBootApplication ở package gốc để mọi thứ nằm dưới nó đều được quét.
Chỉ định thủ công khi cần:
@ComponentScan(basePackages = { "com.app.web", "com.shared" })
// hoặc an toàn khi refactor hơn:
@ComponentScan(basePackageClasses = { WebMarker.class })basePackageClasses trỏ tới một class làm mốc (type-safe, không gãy khi đổi tên package).
Lỗi kinh điển: đặt main ở package con, hoặc bean nằm ngoài cây quét → bean không được tạo, NoSuchBeanDefinitionException. Có thể lọc thêm bằng includeFilters/excludeFilters.