我有一个类的层次结构.我想用@Component标记它们.我试图只标记父类.我希望Spring也将孩子视为组件.但它不会发生.
我尝试使用自定义的@InheritedComponent注释,如here所述.它不起作用.
我写了一个单元测试.它失败了:“没有’bean.inherit.component.Child’类型的限定bean可用”. 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);
}
}
解决方法:
您可以使用ComponentScan.Filter.
@ComponentScan(basePackages = "bean.inherit.component",
includeFilters = @ComponentScan.Filter(InheritedComponent.class))
这将允许Spring自动装配您的Child,而无需您直接将注释附加到Child.
标签:java,inheritance,spring
来源: https://codeday.me/bug/20190527/1164317.html