注册bean有多少种方式

  1. @Component…以及类似注解
  2. @Bean 注解 其中 Bean内部的属性会被依赖注入
  3. @ImportResource(“classpath:spring.xml”)
  4. 实现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 {
    
        }
    }
    
  5. 实现FactoryBean,这种类似于懒加载getObject()是在使用对象的时候才会调用
    @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;
        }
    }
    
    在getBean(“&userService”)时拿到的是FactoryBean
  6. 实现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;
        }
    }
    
  7. 使用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());
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值