@EnableConfigurationProperties 跟 @ConfigurationProperties 的使用
@EnableConfigurationProperties 和 @ConfigurationProperties 的使用
@ConfigurationProperties 可以 将application.properties 以指定前缀的属性应用到指定的类。
@EnableConfigurationProperties 导入启用的属性类
以mybatis的自动导入的源代码为例:
// 相当于<beans> @org.springframework.context.annotation.Configuration // 相当于 Class.forName("org.apache.ibatis.session.SqlSessionFactory") 有异常说明不存在 @ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class }) // 相当于 beanFactory.getBeanByType(javax.sql.DataSource.class) @ConditionalOnBean(DataSource.class) // 启用配置属性 @EnableConfigurationProperties(MybatisProperties.class) // 顺序在DataSourceAutoConfiguration.class之后 @AutoConfigureAfter(DataSourceAutoConfiguration.class) public class MybatisAutoConfiguration { private static final Logger logger = LoggerFactory.getLogger(MybatisAutoConfiguration.class); private final MybatisProperties properties; private final Interceptor[] interceptors; private final ResourceLoader resourceLoader; private final DatabaseIdProvider databaseIdProvider; private final List<ConfigurationCustomizer> configurationCustomizers; public MybatisAutoConfiguration(MybatisProperties properties, ObjectProvider<Interceptor[]> interceptorsProvider, ResourceLoader resourceLoader, ObjectProvider<DatabaseIdProvider> databaseIdProvider, ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider) { this.properties = properties; this.interceptors = interceptorsProvider.getIfAvailable(); this.resourceLoader = resourceLoader; this.databaseIdProvider = databaseIdProvider.getIfAvailable(); this.configurationCustomizers = configurationCustomizersProvider.getIfAvailable(); } }
@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX) public class MybatisProperties { public static final String MYBATIS_PREFIX = "mybatis"; /** * Location of MyBatis xml config file. */ private String configLocation; /** * Locations of MyBatis mapper files. */ private String[] mapperLocations; /** * Packages to search type aliases. (Package delimiters are ",; \t\n") */ private String typeAliasesPackage; /** * Packages to search for type handlers. (Package delimiters are ",; \t\n") */ private String typeHandlersPackage; /** * Indicates whether perform presence check of the MyBatis xml config file. */ private boolean checkConfigLocation = false; /** * Execution mode for {@link org.mybatis.spring.SqlSessionTemplate}. */ private ExecutorType executorType; /** * Externalized properties for MyBatis configuration. */ private Properties configurationProperties; /** * A Configuration object for customize default settings. If {@link #configLocation} * is specified, this property is not used. */ @NestedConfigurationProperty private Configuration configuration; }
mybatis.configLocation
mybatis.mapperLocations
mybatis.typeAliasesPackage
mybatis.configuration
如果嵌套属性 要加 @NestedConfigurationProperty