MybatisConfig类中配置了sqlSessionFactoryBean, MybatisMapperScannerConfig类中配置了MapperScannConfigure ,注解也加了AutoConfigureAfter(MybatisConfig.class),但是debug的时候还是一直先执行MybatisMapperScannerConfig,求大神指教?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Spring框架中,@AutoConfigureAfter注解用于指示一个配置类应该在另一个配置类之后进行配置。根据您的描述,您希望MybatisMapperScannerConfig在MybatisConfig之后执行,但实际调试过程中发现顺序并非如此。这可能是由以下几个原因导致的:
依赖关系解析顺序:尽管使用了@AutoConfigureAfter,Spring在初始化Bean时可能由于其他因素(如直接或间接的依赖注入)调整了配置类的加载顺序。确保没有其他配置或组件强制提前加载了MybatisMapperScannerConfig。
Spring Boot 版本兼容性:不同版本的Spring Boot对自动配置的处理逻辑可能存在差异,确认当前使用的Spring Boot版本与所使用的@AutoConfigureAfter注解行为相兼容。
直接引用问题:如果在代码中有直接通过@Import或者其他的配置方式显式引入了MybatisMapperScannerConfig,这可能会绕过@AutoConfigureAfter定义的顺序。
检查直接引用:确认没有任何地方直接通过@Import、@ComponentScan或其他方式直接引用了MybatisMapperScannerConfig,以避免提前加载。
明确依赖关系:在MybatisMapperScannerConfig类上使用@DependsOn({"sqlSessionFactoryBean"})注解,明确表示该配置依赖于sqlSessionFactoryBean。这样可以确保在扫描Mapper之前,SqlSessionFactory已经完全初始化完毕。
调整配置顺序的手动控制:如果上述方法均不奏效,考虑在MybatisConfig类中手动调用MybatisMapperScannerConfigurer的配置逻辑,确保在SqlSessionFactory创建后立即执行Mapper扫描。
日志分析:利用Spring的详细日志输出,观察配置类加载和Bean初始化的实际顺序,这有助于定位问题所在。
升级或降级Spring Boot版本:如果确定是版本兼容性问题,考虑调整Spring Boot版本至一个更稳定且符合预期行为的版本。
请尝试上述建议并结合您的具体项目情况进行调整,以解决配置执行顺序的问题。