在Spring中继承@Component

Ale*_* Ya 6 java inheritance spring

我有一个类的层次结构.我想用@Component标记它们.我试图只标记父类.我希望Spring也将孩子视为组件.但它不会发生.

我尝试使用这里@InheritedComponent描述的自定义注释.它不起作用.

我写了一个单元测试.它失败了:"No qualifying bean of type 'bean.inherit.component.Child' available".Spring版本是4.3.7.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component
@Inherited
public @interface InheritedComponent {}

@InheritedComponent
class Parent { }

class Child extends Parent {
}

@Configuration
@ComponentScan(basePackages = "bean.inherit.component")
class Config {
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class InheritComponentTest {

    @Autowired
    private Child child;

    @Test
    public void name() throws Exception {
        assertNotNull(child);
    }
}
Run Code Online (Sandbox Code Playgroud)

Gar*_*ary 6

您可以使用ComponentScan.Filter.

@ComponentScan(basePackages = "bean.inherit.component", 
includeFilters = @ComponentScan.Filter(InheritedComponent.class))
Run Code Online (Sandbox Code Playgroud)

这将允许Spring自动装配您的Child,而无需您直接将注释附加到Child.