代碼庫位置:
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 | 配置類爲了防止相關影響,建議只開啓測試對應的配置類 |
「框架、組件」 | 「框架、組件」的引入/配置的注意事項。 |
提示:列出項目開發中引入其他框架或技術需要特別關注或配置的事項。