我有以下问题。
对我来说,实现特定接口的类自动成为bean(与@Component
一样)。
例如,我的包com.test
context:component-scan base-package="com.test"
有两个类。其中一个有注释@Component
,但其他只实现了特定的接口。
我需要一个带有这个接口的类来成为一个bean以及一个带注释的类。
我该怎么做?
答案 0 :(得分:0)
您可以在类中添加@Component或@Service注释,它将是bean,或者您可以将类添加为@Bean到您的spring配置
答案 1 :(得分:0)
有多种方法可以实现这个目标
@Componenet
,@Serivce
,@Repository
等在配置中明确定义Bean
@Bean
public InterfaceType methodname(){
return new Implementation();
}
以编程方式使用org.springframework.beans.factory.config.ConfigurableBeanFactory
@Configuration
@DependsOn("ContextProvider") //Not sure whether we need this
public class BeanConfig implements BeanFactoryAware {
private BeanFactory beanFactory;
@SuppressWarnings({ "rawtypes" })
private void createBean() throws Exception{
if(null == beanFactory){
throw new Exception("Couldnot load Bean Factory");
}
ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory;
configurableBeanFactory.registerSingleton("name", implementation);;
}
}
如果您有多个接口实现,请提供Bean或Stereotype Annotations的名称,并在自动装配时使用该名称。
答案 2 :(得分:0)
您可以使用反射来访问实现给定界面的所有类,然后手动将它们添加到您的上下文中,但请不要。
如果您有多个实现此接口的bean,只需添加@Component(和@Qualifier(“beanName”))