日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

注冊bean有多少種方式

作者:Franklin_xc 更新時間: 2022-07-26 編程語言
  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());
        }
    }
    

原文鏈接:https://blog.csdn.net/weixin_42293662/article/details/125891791

欄目分類
最近更新