@Configuration @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) @ConditionalOnBean({DataSource.class}) @EnableConfigurationProperties({MybatisProperties.class}) @AutoConfigureAfter({DataSourceAutoConfiguration.class})
@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnBean({DataSource.class})
@EnableConfigurationProperties({MybatisProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class MybatisAutoConfiguration {
//...
}
1. @Configuration
不解释,相当于<beans></beans>标签。表明本类自动生成Bean
2. @ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
只有SqlSessionFactory.class,SqlSessionFactoryBean.class存在.class的路径里 才会实例化
(只有当存在SqlSessionFactory,SqlSessionFactoryBean的.class文件才会实例化?不确定)
3. @ConditionalOnBean({DataSource.class})
只有在上下文中存在dataSource的bean是才会运行MybatisAutoConfiguration
4. @EnableConfigurationProperties({MybatisProperties.class})
@ConfigurationProperties注解主要用来把properties配置文件转化为bean来使用的,而@EnableConfigurationProperties注解的作用是@ConfigurationProperties注解生效。如果只配置@ConfigurationProperties注解,在IOC容器中是获取不到properties配置文件转化的bean的。
MybatisProperties是mybatis的配置类,将properties中的配置文件转换成MybatisProperties对象,MybatisProperties上有@ConfigurationProperties(prefix = "mybatis")注解。
MybatisAutoConfiguration上的@EnableConfigurationProperties({MybatisProperties.class})表示让MybatisProperties类生效(并将值注入?)
5. @AutoConfigureAfter({DataSourceAutoConfiguration.class})
当DataSourceAutoConfiguration这个类加载完成后再加载本类(DataSourceAutoConfiguration类是springboot的dataSource自动生成bean的相关类?带确认)