spring-创建 bean 的几种姿势
-
使用 @Bean 注解
-
使用 @Component 注解。@Service 和 @Repository,等都是 @Component 的继承
-
使用 xml,不推荐
-
使用 @import 注解,可以导入一个普通类作为 bean,或者导入被 @Configuration 注解的配置类,或者 ImportSelector, ImportBeanDefinitionRegistrar 的实现。
-
实现 BeanFactoryAware 方法
-
创建 BeanDefinitionRegistryPostProcessor 的实现的实现类,并实现 postProcessBeanDefinitionRegistry 方法
@Import 普通类
public class ImportDemo { public void say() { System.out.println("this is a @import demo class "); } } @Configuration @Import(ImportDemo.class) public class AppConfig { } public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); ImportDemo bean = context.getBean(ImportDemo.class); bean.say(); } }
@Import 配置类
参考:http://events.jianshu.io/p/899013ac1d9a
创建 BeanDefinitionRegistryPostProcessor bean 实例
@Configuration public class AppConfig { @Bean public BeanDefinitionRegistryPostProcessor people() { return new BeanDefinitionRegistryPostProcessor() { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { } @Override public void postProcessBeanDefinitionRegistry(@NonNull BeanDefinitionRegistry registry) throws BeansException { BeanDefinitionBuilder beanBuilder = BeanDefinitionBuilder.genericBeanDefinition(People.class, People::new); registry.registerBeanDefinition("people", beanBuilder.getBeanDefinition()); } }; } }
人的潜力是可以激发的,比如说你给我50斤的砖我可能拎不动,但你要是给我100斤的人民币我肯定拎起来就跑。