🔍
Configuration

Component Scanning

@ComponentScan
💡 Component scanning ek SECURITY GUARD hai jo poori building (package tree) mein PATROL karta hai, har room (class) check karta hai — jis room par SPECIFIC badge (@Component annotation) laga hai, usko REGISTER kar leta hai apni list (container) mein.

@ComponentScan Spring ko batata hai KIS PACKAGE (aur uske sub-packages) mein @Component-annotated classes DHOONDNI hain. Spring Boot mein, @SpringBootApplication automatically is annotation ko INCLUDE karta hai — main class ke PACKAGE se scanning shuru hoti hai.

Isliye Spring Boot mein CONVENTION hai — main application class (jisme @SpringBootApplication hai) ROOT package mein rakho, saari doosri classes (controllers, services, repositories) ISKE sub-packages mein — taaki SAB automatically scan ho jaayein.

com.example.bookstore
├── BookstoreApplication.java     ← @SpringBootApplication, YAHA se scanning shuru
├── controller/BookController.java
├── service/BookService.java
└── repository/BookRepository.java
// Sab automatically discover ho jaate hain — koi manual registration nahi chahiye
🔍
Component scanning ek SECURITY GUARD hai jo poori building (package tree) mein PATROL karta hai, har room (class) check karta hai — jis room par SPECIFIC badge (@Component annotation) laga hai, usko REGISTER kar leta hai apni list (container) mein.
1 / 2
⚡ Quick Recap
  • @ComponentScan = package tree mein @Component classes dhoondta hai
  • Spring Boot mein automatic — main class ke package se shuru hota hai
  • Convention: main class ROOT package mein rakho
Is page mein (2 subtopics)

@ComponentScan Spring ko batata hai KAHA @Component (aur uske specializations) DHOONDNE hain — package aur uske sub-packages RECURSIVELY scan hote hain. Spring Boot mein, @SpringBootApplication class ke PACKAGE se scanning shuru hoti hai — isliye main class ko HAMESHA root package mein rakhna best practice hai.

com.example.myapp
├── MyApp.java                 ← @SpringBootApplication, root package
├── controller/
│   └── UserController.java    ← automatically scan hoga
├── service/
│   └── UserService.java       ← ye bhi
└── util/                       ← agar ye package ALAG tree mein hota, scan NAHI hota

@ComponentScan ke filters (includeFilters, excludeFilters) se SPECIFIC classes ko scan mein SHAAMIL ya EXCLUDE kiya ja sakta hai — jaise testing ke liye kuch beans skip karна, ya conditionally kuch classes hi register karna.

@ComponentScan(
    excludeFilters = @ComponentScan.Filter(
        type = FilterType.ANNOTATION,
        classes = Deprecated.class
    )
)