弹簧。类加载器

时间:2017-12-13 16:38:41

标签: java spring

我有以下问题。

对我来说,实现特定接口的类自动成为bean(与@Component一样)。

例如,我的包com.test context:component-scan base-package="com.test"有两个类。其中一个有注释@Component,但其他只实现了特定的接口。

我需要一个带有这个接口的类来成为一个bean以及一个带注释的类。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

您可以在类中添加@Component或@Service注释,它将是bean,或者您可以将类添加为@Bean到您的spring配置

答案 1 :(得分:0)

有多种方法可以实现这个目标

  1. 根据您的班级类型添加Spring Stereotype @Componenet@Serivce@Repository
  2. 在配置中明确定义Bean

    @Bean
    public InterfaceType methodname(){
        return new Implementation();
    }
    
  3. 以编程方式使用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”))