Springboot宣言beanの6つの方法
2461 ワード
茴香豆の4つの書き方.
----宣言bean----1.@Componentは通常bean 2.@を宣言するComponent宣言FactoryBean
3.構成クラスで@Beanを使用
----手動登録BeanDefinition----4.BeanDefinitionRegistryPostProcessorを使用してBeanDefinitionを登録する
5.@Import+ImportBeanDefinitionRegisterを使用してBeanDefinitionを登録する
6.xmlプロファイルを導入するには、古いプロジェクトのアップグレード以外は基本的に使わないので、何も言うことはありません.
登録方法によって実行される順序が異なり、全体的に順序が異なります.ImportBeanDefinitionRegister>BeanDefinitionRegistryPostProcessor>@Bean=@Component
FactoryBeanを登録してbeanを提供するとSpringは依存の優先順位を管理することができないので、MyBeanに依存するbeanがspringで先に組み立てられるとbeanが見つからない場合があり、その際にbeanが対応するFactoryBeanに同時に依存してFactoryBeanが先に登録されることを確かめることができる.
----宣言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が先に登録されることを確かめることができる.