我有一个类的层次结构。我想用@Component标记它们。我试图只标记父类。我希望Spring也将孩子视为组件。但它不会发生。
我尝试使用自定义"No qualifying bean of type 'bean.inherit.component.Child' available"
注释,如here所述。它不起作用。
@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);
}
}
。 Spring版本是4.3.7。
{{1}}
答案 0 :(得分:6)
您可以使用ComponentScan.Filter。
df$new_col<-df[, grepl("lolz", names(df))]*df[, grepl("lel", names(df))]
这将允许Spring自动装配您的Child,而无需直接将注释附加到Child。
答案 1 :(得分:1)
回答已接受的答案“如何在XML中做”所提出的问题 这摘自《 Spring in Action》,我举了一个简单的例子。
用组件注释基类,添加限定符
@Component
@InstrumentQualifier("TUBA")
public class Instrument {}
限定子类-注意-不需要@component
@InstrumentQualifier("GUITAR")
public class Guitar extends Instrument {}
像这样注入
@Autowired
@InstrumentQualifier("GUITAR")
public void setInstrument(Instrument instrument) {this.instrument =instrument;}
在context.xml中,为可分配类型添加一个包含过滤器
<context:component-scan base-package="some.pkg">
<context:include-filter type="assignable" expression="some.pkg.Instrument"/>
</context:component-scan>
类型和表达式在这里定义策略。 您还可以将类型用作“注释”,表达式将是定义自定义限定符以实现相同目标的路径。