@ComponentScan#basePackages specifies packages to scan for annotated component. If specific packages are not defined, scanning will occur from the package of the class that declares this annotation.
The basePackages attribute is an array of String so we can define multiple packages. e.g.
@ComponentScan(basePackages = {"com.logicbig.example.client", "com.logicbig.example.service"})
Alternatively, we can specify a comma- or semicolon- or space-separated list of packages (since spring-context 4.1.1.RELEASE):
@ComponentScan(basePackages = "com.logicbig.example.client, com.logicbig.example.service")
@ComponentScan(basePackages = "com.logicbig.example.client;com.logicbig.example.service")
@ComponentScan(basePackages = "com.logicbig.example.client com.logicbig.example.service")
@ComponentScan(basePackages = {"com.logicbig.example.client com.logicbig.example.service"})
Example
Creating beans
package com.logicbig.example.service;
import org.springframework.stereotype.Service;
@Service
public class RetailOrderService {
public void placeOrder(String item) {
System.out.printf("Retail order placed. Item: %s%n", item);
}
}
package com.logicbig.example.service;
import org.springframework.stereotype.Service;
@Service
public class WholeSaleOrderService {
public void placeOrder(String item, int quantity) {
if (quantity < 10) {
throw new IllegalArgumentException(
"Quantity must be more than 10 for a wholesale order");
}
System.out.printf("Wholesale order placed. Item: %s Quantity: %s%n", item, quantity);
}
}
package com.logicbig.example.client;
import com.logicbig.example.service.RetailOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Buyer {
@Autowired
private RetailOrderService orderService;
public void buySomething() {
orderService.placeOrder("Laptop");
}
}
package com.logicbig.example.client;
import com.logicbig.example.service.WholeSaleOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Wholesaler {
@Autowired
private WholeSaleOrderService wholeSaleOrderService;
public void buySomethingInBulk() {
wholeSaleOrderService.placeOrder("Car", 100);
}
}
Main class
package com.logicbig.example.app;
import com.logicbig.example.client.Buyer;
import com.logicbig.example.client.Wholesaler;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = {"com.logicbig.example.client","com.logicbig.example.service"})
public class OnlineOrderApp {
public static void main(String... strings) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(OnlineOrderApp.class);
System.out.println("-- Spring container started and is ready --");
Buyer buyer = context.getBean(Buyer.class);
buyer.buySomething();
Wholesaler wholesaler = context.getBean(Wholesaler.class);
wholesaler.buySomethingInBulk();
}
}
Output-- Spring container started and is ready -- Retail order placed. Item: Laptop Wholesale order placed. Item: Car Quantity: 100
Example ProjectDependencies and Technologies Used: - spring-context 6.1.2 (Spring Context)
Version Compatibility: 3.2.9.RELEASE - 6.1.2 Version compatibilities of spring-context with this example: Versions in green have been tested.
- JDK 17
- Maven 3.8.1
|