代码库位置:
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 | 配置类为了防止相关影响,建议只开启测试对应的配置类 |
「框架、组件」 | 「框架、组件」的引入/配置的注意事项。 |
提示:列出项目开发中引入其他框架或技术需要特别关注或配置的事项。