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 配置类为了防止相关影响,建议只开启测试对应的配置类
「框架、组件」 「框架、组件」的引入/配置的注意事项。
   

提示:列出项目开发中引入其他框架或技术需要特别关注或配置的事项。

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