1. 程式人生 > 其它 >Spring核心概念

Spring核心概念

BeanDefinition

BeanDefinition用於儲存bean資訊,比如bean是單例還是原型、bean的型別以及是否懶載入等等,Spring判斷bean是否被註冊是根據判斷判斷容器中是否存在該BeanDefinition的,除了使用註解和xml的方式對bean進行註冊,開發者還可以自己自定義建立beanDefinition並註冊到容器中,如下程式碼。

        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
        beanDefinition.setScope(ConfigurableBeanFactory.SCOPE_SINGLETON);
        beanDefinition.setBeanClassName("userService");
        beanDefinition.setBeanClass(UserServiceImpl.class);
        applicationContext.registerBeanDefinition("userService", beanDefinition);

BeanDefinitionReader

BeanDefinitionReaderBeanDefinition的讀取器,用於讀取BeanDefinition並註冊到Spring容器中,建立該物件是需要傳入spring容器物件。這個類的底層是根據傳入的class自動建立BeanDefinition並註冊到spring容器中,如下以註解的方式進行掃描註冊程式碼,除了使用註解的方式進行掃描,還可以使用xml的方式進行掃描。


        AnnotatedBeanDefinitionReader beanDefinitionReader = new AnnotatedBeanDefinitionReader(applicationContext);
        beanDefinitionReader.registerBean(UserServiceImpl.class);

ClassPathBeanDefinitionScanner

該類用於根據包名掃描並建立BeanDefinition,可以通過使用ClassPathBeanDefinitionScanner掃描包下的所有類,判斷類中是否用於Spring容器在註解,如果有則進行掃描註冊到容器中,掃描完畢後必須對Spring容器進行重新整理,如下程式碼所示。spring容器註解有service、Component註解等。

        ClassPathBeanDefinitionScanner classPathBeanDefinitionScanner = new ClassPathBeanDefinitionScanner(applicationContext);
        classPathBeanDefinitionScanner.scan("com.lyra.user.service.impl");
        applicationContext.refresh();