Component Filter Assignable
File: context.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="bean"> <context:include-filter type="annotation" expression="bean.Magic"/> <context:include-filter type="assignable" expression="bean.ComponentMarker"/> <context:include-filter type="aspectj" expression="* void bean.*Service*(..)"/> </context:component-scan> </beans> File: Main.java import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) throws Exception { ApplicationContext ac = new ClassPathXmlApplicationContext( "context.xml"); String[] beanNames = ac.getBeanDefinitionNames(); for (String beanName : beanNames) { System.out.println(beanName + ": " + ac.getBean(beanName)); } } } File: Magic.java package bean; public @interface Magic { } File: MarkedBean.java package bean; public class MarkedBean implements ComponentMarker { @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("MarkedBean"); sb.append("{}"); return sb.toString(); } } File: SimpleBean.java package bean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; /** * @author janm */ @Magic class SimpleBean { private Dependency dependency; @Autowired(required = true) public void setDependency(Dependency dependency) { this.dependency = dependency; } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("SimpleBean"); sb.append(ObjectUtils.identityToString(this)); sb.append("{dependency=").append(dependency); sb.append('}'); return sb.toString(); } } @Component class Dependency { @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("Dependency"); sb.append(ObjectUtils.identityToString(this)); sb.append("{}"); return sb.toString(); } } File: ComponentMarker.java package bean; public interface ComponentMarker { }