Spring 註解使用筆記(一)

代碼庫位置:

https://gitee.com/sleeber/nuts.spring.sample

https://github.com/HazelNutsWorkGroup/nuts.spring.sample.git

實驗步驟:

  • 步驟一
    加載Spring Java配置文件

      //Java配置文件加載
      ApplicationContext context = new AnnotationConfigApplicationContext(ModelConfig.class);

    Bean 定義

      @Configuration
      public class ModelConfig {
    
          @Bean("person")
          public Person getPerson() {
              return new Person();
          }
      }

    提示: 對應測試方法 testGetPersonBean

  • 步驟二 包掃描路徑

      @Configuration
      @ComponentScan("nuts.spring.annotation")
      public class ModelConfig {
    
          @Bean("person")
          public Person getPerson() {
              return new Person();
          }
      }

    提示: 對應測試方法 testGetBeanNames

  • 步驟三 excludeFilters

      @Configuration
      @ComponentScan(value = "nuts.spring.annotation", excludeFilters = {
              @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class, Configuration.class})
      })
      public class ExcludeConfiguration {
    
      }

    提示: 對應測試方法 testExcludeBeanNames

  • 步驟四 includeFilters

      @Configuration
      @ComponentScan(value = "nuts.spring.annotation", includeFilters = {
              @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Service.class})
      }, useDefaultFilters = false) //需要禁用默認引入規則
      public class IncludeConfiguration {
    
      }

    提示: 對應測試方法 testIncludeBeanNames

  • 步驟五 自定義Filter類型

      @Configuration
      @ComponentScan(value = "nuts.spring.annotation", includeFilters = {
              @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {
                      CustomerFilter.class
              })
      })
      public class CustomerConfiguration {
      }

    提示: 對應測試方法 testIncludeBeanNames

  • 步驟六 Scope 指定單實例/多實例

      /**
       * Scope's parameter
       * singleton Single instance, created during container initialization
       * prototype multi instance, created only when getting examples
       */
      @Scope("prototype")
      @Bean
      public Person person() {
          System.out.println("Instance person...");
          return new Person();
      }

    提示: 對應測試方法 testInstanceScope

  • 步驟七 Lazy 懶加載

      @Lazy
      @Bean
      public Person person() {
          System.out.println("Instance person...");
          return new Person();
      }

    提示: 對應測試方法 testInstanceLazy

  • 步驟八 Conditional 按條件加載

      @Conditional(WindowsCondition.class)
      @Bean("windows")
      public Person getWindows() {
          System.out.println("Instance Windows...");
          return new Person();
      }
    
      @Conditional(LinuxCondition.class)
      @Bean("linux")
      public Person getLinux() {
          System.out.println("Instance Linux...");
          return new Person();
      }

    提示: 對應測試方法 testConditional

  • 步驟九 Import 快速引入第三方組件

    @Configuration
    @Import(Group.class)
    public class ImportConfiguration {
    
      /**
       * ComponentScan
       * Bean
       * Import
       */
      @Bean
      public Person person() {
          System.out.println("Instance person...");
          return new Person();
      }
    }

    提示: 對應測試方法 testImportBean

  • 步驟十 ImportSelector 方式引入第三方組件

      @Configuration
      @Import({Group.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
      public class ImportConfiguration { }
    
      public class MyImportSelector implements ImportSelector {
          @Override
          public String[] selectImports(AnnotationMetadata importingClassMetadata) {
              return new String[]{"nuts.spring.annotation.model.Classic"};
          }
      }

    提示: 對應測試方法 testImportBean

注意事項

框架、組件 注意事項
@Configuration 配置類爲了防止相關影響,建議只開啓測試對應的配置類
「框架、組件」 「框架、組件」的引入/配置的注意事項。
   

提示:列出項目開發中引入其他框架或技術需要特別關注或配置的事項。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章