- @Component…以及类似注解
- @Bean 注解 其中 Bean内部的属性会被依赖注入
- @ImportResource(“classpath:spring.xml”)
- 实现BeanDefinitionRegistryPostProcessor
@Component public class PostProcessor implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition(); beanDefinition.setBeanClass(OrderService.class); registry.registerBeanDefinition("orderService",beanDefinition); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { } }
- 实现FactoryBean,这种类似于懒加载
getObject()
是在使用对象的时候才会调用
在getBean(“&userService”)时拿到的是FactoryBean@Component("userService") public class MyFactoryBean implements FactoryBean<OrderService> { @Override public OrderService getObject() throws Exception { return new OrderService(); } @Override public Class<?> getObjectType() { return OrderService.class; } @Override public boolean isSingleton() { return true; } }
- 实现SmartFactoryBean,实现isEagerInit()如果返回为true,则启动的时候就创建OrderService对象
@Component("userService") public class MySmartFactoryBean implements SmartFactoryBean<OrderService> { @Override public OrderService getObject() throws Exception { return new OrderService(); } @Override public Class<?> getObjectType() { return OrderService.class; } @Override public boolean isSingleton() { return true; } @Override public boolean isEagerInit() { return true; } }
- 使用AnnotationConfigApplicationContext注册Bean, Bean中的属性会被依赖注入
@Component public class ApplicationContextBean { @Autowired AnnotationConfigApplicationContext applicationContext; @PostConstruct public void test(){ applicationContext.register(User.class); applicationContext.registerBean("orderService4",OrderService.class,()->new OrderService()); } }
注册bean有多少种方式
于 2022-07-20 16:13:27 首次发布