@Profile(“dev”)
配置不同的环境参数
参数注入
@SpringBootApplication@PropertySource("classpath:appSource.properties")public class ExternConfigurationApplication {public static void main(String[] args) throws IOException {SpringApplication springApplication = new SpringApplication(ExternConfigurationApplication.class);// 创建PropertiesProperties properties = new Properties();// 通过当前类的ClassLoaderInputStream is= ExternConfigurationApplication.class.getClassLoader().getResourceAsStream("app.properties");// 将输入流读取成propertiesproperties.load(is);springApplication.setDefaultProperties(properties);springApplication.run(args);}}
@ConfigurationProperties(prefix=”user”)
@Validated
@PropertySource(“classpath:data/user.properties”)
实现一个 enable注解
ImportSelector 等于 @import + 延时
public class MyDeferredImportSelector implements DeferredImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"cn.tulingxueyuan.beans.Person"};}@Overridepublic Predicate<String> getExclusionFilter() {return null;}@Overridepublic Class<? extends Group> getImportGroup() {// 这个返回值决定调用DeferredImportSelector.selectImports 如果null// 还是调用Group.selectImportsreturn MyGroup.class;}// 如果getImportGroup返回自定义Group , 会调用自定义Group的process方法// 如果getImportGroup返回 null,会调用DefaultDeferredImportSelectorGroup的process方法,即调用selectImports// 分组利用归类,同一组的bean只影响本组的顺序private static class MyGroupimplements DeferredImportSelector.Group{AnnotationMetadata metadata;@Overridepublic void process(AnnotationMetadata metadata, DeferredImportSelector selector) {this.metadata=metadata;}@Overridepublic Iterable<Entry> selectImports() {List<Entry> list=new ArrayList<>();list.add(new Entry(this.metadata,"cn.tulingxueyuan.beans.Person"));return list;}}}
@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()};
}
}
