Skip to content

Commit

Permalink
spring 动态加载bean
Browse files Browse the repository at this point in the history
  • Loading branch information
qinfuxiang committed Nov 22, 2021
1 parent dfc78e3 commit 4b23521
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package fast.boot.autoconfigure.annotation;

import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
//@Import(HelloWorldConfiguration.class)
//@Import(HelloWorldImportSelector.class)
@Import(HelloWorldImportBeanDefinitionRegistrar.class)
//@Import(HelloWorldImportBeanDefinitionRegistrar.class)
//@Import(HelloWorldBeanFactoryPostProcessor.class)
public @interface EnableHelloWorld {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package fast.boot.autoconfigure.configuration;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;

/**
* @author qinfuxiang
*/
public class HelloWorldBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
BeanDefinitionBuilder bdb = BeanDefinitionBuilder.rootBeanDefinition(HelloWorldConfiguration.class);
// registry.registerBeanDefinition(HelloWorldConfiguration.class.getName(), bdb.getBeanDefinition());
BeanDefinitionHolder holder = new BeanDefinitionHolder(bdb.getBeanDefinition(), HelloWorldConfiguration.class.getName(),
null);
BeanDefinitionReaderUtils.registerBeanDefinition(holder, registry);
}

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

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package fast.boot.autoconfigure.configuration;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;

/**
* @author qinfuxiang
*/
public class HelloWorldBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
BeanDefinitionBuilder bdb = BeanDefinitionBuilder.rootBeanDefinition(HelloWorldConfiguration.class);
beanFactory.registerSingleton(HelloWorldConfiguration.class.getName(), bdb.getBeanDefinition());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
fast.boot.autoconfigure.configuration.HelloWorldBeanDefinitionRegistryPostProcessor

0 comments on commit 4b23521

Please sign in to comment.