Spring Component Scan Instruction

After you configure <context:component-scan base-package="com.dev2qa.examples"> in Spring bean configuration xml file, Spring container can automatically scan the java files under base-pack and it’s sub packages. If it has scanned the classes with annotations like @Component, @Service, @Repository or @Controller, the container will register these classes as managed bean.

The <context:component-scan /> xml tag also has a use-default-filters attribute and it’s default value is true which will let Spring container to scan all the java classes that annotated with @Component, @Repository, @Service or @Controller etc, and register them as managed beans. If you set it’s value to false manually, then the scan will not happened.

Note: if the <context:component-scan> is configured, the <context:annotation-config/> tag do not need to be configured in xml, because the former contains the latter. In addition, <context:component-scan> provides two child Tags.

  1. <context:include-filter> : If you find the scan granularity is a little bigger and you just want to scan @Service class under special package, then you can use this xml tags.Below example will only scan the Java classes annotated with @Service in specified base-package and register them as managed bean. Please note that you should set use-default-filters to false to make the settings take effect.
    <context:component-scan base-package="com.dev2qa.examples" use-default-filters="false">  
    
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />   
    
    </context:component-scan>
  2. <context:exclude-filter> : You can use this tag when you do not want to include some special sub package or special annotation annotated classes. Below are examples.
    <context:component-scan base-package="com.dev2qa.examples" use-default-filters="false">  
    
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />   
    
    <context:exclude-filter type="regex" expression="com\.dev2qa\.examples\.ignore\..*"/>
    
    </context:component-scan>
  3. Combine exclude and include filter : Generally you can combine exclude-filter and include-filter in same xml configuration. Exclude filter will run first than include filter.

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.