@ComponentScan#excludeFilters can be used to exclude component classes from scanning. For example
@ComponentScan(basePackages = "com.logicbig.example.client;com.logicbig.example.service",
excludeFilters = @ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
classes = {WholeSaleOrderService.class, Wholesaler.class})
Example
Beans
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 RetailBuyer {
@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);
}
}
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);
}
}
Main class
package com.logicbig.example.app;
import com.logicbig.example.client.RetailBuyer;
import com.logicbig.example.client.Wholesaler;
import com.logicbig.example.service.WholeSaleOrderService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
@Configuration
@ComponentScan(basePackages = "com.logicbig.example.client;com.logicbig.example.service",
excludeFilters = @ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
classes = {WholeSaleOrderService.class, Wholesaler.class})
)
public class OnlineOrderApp {
public static void main(String... strings) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(OnlineOrderApp.class);
System.out.println("-- Spring container started and is ready --");
RetailBuyer retailBuyer = context.getBean(RetailBuyer.class);
retailBuyer.buySomething();
boolean wholeSaleOrderServiceRegistered =
context.containsBean("wholeSaleOrderService");
System.out.println("wholeSaleOrderService registered: "+ wholeSaleOrderServiceRegistered);
}
}
Output-- Spring container started and is ready -- Retail order placed. Item: Laptop wholeSaleOrderService registered: false
Example ProjectDependencies and Technologies Used: - spring-context 6.1.2 (Spring Context)
Version Compatibility: 4.2.0.RELEASE - 6.1.2 Version compatibilities of spring-context with this example: Versions in green have been tested.
- JDK 17
- Maven 3.8.1
|