Springboot宣言beanの6つの方法

2461 ワード

茴香豆の4つの書き方.
----宣言bean----1.@Componentは通常bean 2.@を宣言するComponent宣言FactoryBean
@Component
public class MyFactory implements FactoryBean {
 @Override
    public MytestBean getObject() throws Exception {
        return new MytestBean();
    }

    @Override
    public Class> getObjectType() {
        return MytestBean.class;
    }
}

3.構成クラスで@Beanを使用
@Configuration
public class MyConfig {
    @Bean
    public Mytestbean create(){}
}

----手動登録BeanDefinition----4.BeanDefinitionRegistryPostProcessorを使用してBeanDefinitionを登録する
@Component
public class MyBeanRegister implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MytestBean.class);
        beanDefinition.setSynthetic(true);
        MutablePropertyValues mpv = beanDefinition.getPropertyValues();
        mpv.addPropertyValue("age", "25");
        registry.registerBeanDefinition("mytestBean", beanDefinition);
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    }
}

5.@Import+ImportBeanDefinitionRegisterを使用してBeanDefinitionを登録する
public class MyBeanImport implements ImportBeanDefinitionRegistrar{
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MytestBean.class);
        beanDefinition.setSynthetic(true);
        MutablePropertyValues mpv = beanDefinition.getPropertyValues();
        mpv.addPropertyValue("age", "25");
        registry.registerBeanDefinition("mytestBean", beanDefinition);
    }
}
 Bootstrap :
@Import(MyBeanImport.class)

6.xmlプロファイルを導入するには、古いプロジェクトのアップグレード以外は基本的に使わないので、何も言うことはありません.
登録方法によって実行される順序が異なり、全体的に順序が異なります.ImportBeanDefinitionRegister>BeanDefinitionRegistryPostProcessor>@Bean=@Component
FactoryBeanを登録してbeanを提供するとSpringは依存の優先順位を管理することができないので、MyBeanに依存するbeanがspringで先に組み立てられるとbeanが見つからない場合があり、その際にbeanが対応するFactoryBeanに同時に依存してFactoryBeanが先に登録されることを確かめることができる.