@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