1. 程式人生 > >Spring註解驅動知識點簡單記錄一

Spring註解驅動知識點簡單記錄一

一:使用@Configuration和@Bean等元件替代xml方式將bean物件新增到spring容器中

  1. 建立一個實體類
        
  2. 建立配置類
           
       註解解釋:
           @Configuration:這個註解是告訴spring這是一個配置類,相當於xml檔案
           @Bean:給容器註冊一個Bean,型別為返回值的型別,bean物件的id名稱預設為方法名,
                           也可以自定義bean的id名稱,例如:@Bean("person02"),那麼這個Person物件
                           的id名稱就是person02
  3. 測試類MainTest
     ⑴通過型別獲取bean物件
          
          注意:AnnotationConfigApplicationContext:可以實現基於Java的配置類載入Spring的應用上下文
          效果:
                
      ⑵ 通過id名稱獲取bean物件
           
          效果:
              

        ⑶通過型別獲取bean的id名稱,然後通過id名稱獲取bean物件
              
             效果:
                 

          

二:自動掃描元件之@ComponentScan

  1. 簡介
       @ComponentScan主要就是定義掃描的路徑從中找出標識了需要裝配
    的類自動裝配到spring的bean容器中。
  2. 下面我們建立web,service,dao層的類
           
       
       
  3. 建立配置類
     
     注意:
          @ComponentScan:掃描com.test路徑下所有包的類
  4. 建立測試類
     
     注意:如上圖,首先使用AnnotationConfigApplicationContext載入配置類MainConfig,獲取到
                ApplicationContext上下文物件,然後通過這個上下文物件去獲取通過配置類掃描載入
                那些使用註解建立的bean對像,例如通過@Controller,@Service,@Repository等注
                解建立的bean物件。ApplicationContext上下文獲取到容器中的這些物件後打印出來。
     效果:
         
  5. 下面我們在掃描載入並且建立bean物件到spring容器中時可以排除一些不需要建立的bean物件。
     
     注意:
        excludeFilters:表示在掃描載入的路徑下排除一些不需要載入到容器中的bean物件,
                                  使用@Filter進行過濾,在@Filter中使用註解型別過濾, 這裡我們不
                                  需要載入 Controller和Service型別的bean物件到容器中去。 
    執行測試類後的效果:
         
  6. 當然在@ComponentScan註解中還有其他的一些註解規則,例如includeFilters方法,表示
     只加載建立哪些型別的bean物件。但是這個includeFilters必須和useDefaultFilters一起用才
     會生效,否則不生效。
      
     效果:
       
  7. 上面我們使用includeFilters指定過濾規則時使用了FilterType.ANNOTATION的方式
     去過濾的,其實在FilterType中還有其他的方式,如下:
     ⑴FilterType.ANNOTATION:是按照註解方式
     ⑵FilterType.ASSIGNABLE_TYPE:是按照給定的型別,比如我們現在指定載入BookService型別。
         
         效果:
          
      ⑶FilterType.ASPECTJ:使用ASPECTJ表示式方式(這個基本不會使用)
      ⑷FilterType.REGEX:使用正則表示式方式(這個不常使用)
      ⑸FilterType.CUSTOM:使用自定義規則方式,如下:
           a:建立實現了TypeFilter的類
                  
                  
                  注意:
                         MetadataReader:表示的是讀取到的當前正在掃描的類的資訊
                         MetadataReaderFactory:表示可以獲取到其他任何類資訊
           b:在配置類中使用我們自定義的過濾類
                 
           c:執行測試類的效果:
                
                

三:元件作用域之@Scope

  1. 簡介
     @Scope作用域它存在4種情況:
      a:prototype,表示多例項的,每一個獲取bean物件,都會建立一次
      b:singleton,表示單例項的(預設的@Scope也是單例項的),在IOC容器啟動的時候就會呼叫方法建立
            物件放到IOC容器中,以後每次獲取就是直接從容器中拿。
      c:request,同一次請求建立一個例項
      d:session,同一個session建立一個例項
  2. 建立一個配置類,建立person物件,並且預設為單例項
     a:配置類
                  
     b:測試類
            
     c:效果:
           
  3. 設定@Scope為多例項試試看效果:
      
      測試類:
       
      效果:
        

        
四:懶載入之@Lazy

  1.  簡介
      首先懶載入是專門針對單例項bean的。單例項bean一般是預設在容器啟動的時候建立物件,而
      如果我們使用懶載入後,就會變成容器啟動的時候不建立物件,會在第一次使用(獲取)bean物件
      的時候去建立bean物件並且初始化。
  2. 例項:我們不使用懶載入時的效果:
      a:配置類
                  
      b:測試類
              
      c:效果
         
  3. 例項:我們使用懶載入時的效果:
      a:在配置類建立person物件的方法上新增懶載入
        
     b:測試類
        
     c:效果
        

文章目錄