@Profile(“dev”)
    image.png
    配置不同的环境参数

    参数注入

    1. @SpringBootApplication
    2. @PropertySource("classpath:appSource.properties")
    3. public class ExternConfigurationApplication {
    4. public static void main(String[] args) throws IOException {
    5. SpringApplication springApplication = new SpringApplication(ExternConfigurationApplication.class);
    6. // 创建Properties
    7. Properties properties = new Properties();
    8. // 通过当前类的ClassLoader
    9. InputStream is= ExternConfigurationApplication.class.getClassLoader()
    10. .getResourceAsStream("app.properties");
    11. // 将输入流读取成properties
    12. properties.load(is);
    13. springApplication.setDefaultProperties(properties);
    14. springApplication.run(args);
    15. }
    16. }

    @ConfigurationProperties(prefix=”user”)
    @Validated
    @PropertySource(“classpath:data/user.properties”)image.png

    实现一个 enable注解
    ImportSelector 等于 @import + 延时

    1. public class MyDeferredImportSelector implements DeferredImportSelector {
    2. @Override
    3. public String[] selectImports(AnnotationMetadata importingClassMetadata) {
    4. return new String[]{"cn.tulingxueyuan.beans.Person"};
    5. }
    6. @Override
    7. public Predicate<String> getExclusionFilter() {
    8. return null;
    9. }
    10. @Override
    11. public Class<? extends Group> getImportGroup() {
    12. // 这个返回值决定调用DeferredImportSelector.selectImports 如果null
    13. // 还是调用Group.selectImports
    14. return MyGroup.class;
    15. }
    16. // 如果getImportGroup返回自定义Group , 会调用自定义Group的process方法
    17. // 如果getImportGroup返回 null,会调用DefaultDeferredImportSelectorGroup的process方法,即调用selectImports
    18. // 分组利用归类,同一组的bean只影响本组的顺序
    19. private static class MyGroup
    20. implements DeferredImportSelector.Group{
    21. AnnotationMetadata metadata;
    22. @Override
    23. public void process(AnnotationMetadata metadata, DeferredImportSelector selector) {
    24. this.metadata=metadata;
    25. }
    26. @Override
    27. public Iterable<Entry> selectImports() {
    28. List<Entry> list=new ArrayList<>();
    29. list.add(new Entry(this.metadata,"cn.tulingxueyuan.beans.Person"));
    30. return list;
    31. }
    32. }
    33. }
    @Component
    public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
           GenericBeanDefinition beanDefinition=new GenericBeanDefinition();
            beanDefinition.setBeanClass(Person.class);
            registry.registerBeanDefinition("person",beanDefinition);
        }
    
    }
    

    ImportSelector 等于 @import

    @Component
    public class MyImportSelector implements ImportSelector {
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            // 可以以字符串的形式注册多个Bean
            // 字符串必须是类的完整限定名  getBean不能根据名字获取获取的, 必须要根据类型获取
            return new String[]{"cn.tulingxueyuan.beans.Person",Wife.class.getName()};
        }
    }