Close

Spring - Using excludeFilters attribute of @ComponentScan to exclude component classes

[Last Updated: Mar 27, 2021]

@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 Project

Dependencies and Technologies Used:

  • spring-context 4.2.3.RELEASE: Spring Context.
  • JDK 1.8
  • Maven 3.6.3

@ComponentScan#excludeFilters example Select All Download
  • spring-component-scan-excluding-classes
    • src
      • main
        • java
          • com
            • logicbig
              • example
                • app
                  • OnlineOrderApp.java
                  • client
                  • service

    See Also