手撕JAVA(二十八)@conditional
在《手撕JAVA(八)》一文中已经讨论过springboot的自动装配原理,其实本质上就是由XXXConfiguration这些自动配置类来完成我们所需要的类的自动加载。但是springboot整合了整个J2EE,如果整个J2EE所需要的类全部加载,那么肯定是内存撑爆,速度迟缓。所以springboot采用了@conditional注解来做判断加载。只在满足特定的情况下才加载特定的类。
以下是conditional系列注解对应的作用:
这里以mybatis的自动配置类源码来举例:
整个类名前面一堆注解,其实就是对这个自动配置类做了判断加
1.系统中必须有SqlsessionFactory.class,SqlSessionFactoryBean.class该配置类才会加载
2.容器中必须有DataSource类
3.绑定MybatisProperties.class作为配置文件类
4.在DataSourceAutoConfiguration.class加载后再加载
需要注意的是这里的.class是类型标记
其实仔细思考会发现持久层框架的自动配置类都依赖于dataSource,
但是在dataSource的自动配置类里面确实missingBean
就是这种设计给了我们自定义dataSource的机会,也就有了之前切换druid之类的操作机会。
如何查看加载了哪些东西?
在springboot配置文件里
Debug=true
启动项目后