MyBatis BaseTypeHandler 引用 Mapper 导致循环依赖的解决方法 - Setter 注入和 ApplicationContext 获取 Bean
循环依赖是因为在 MyBatis 的 BaseTypeHandler 中引用了 Mapper,在 Mapper 中又引用了 BaseTypeHandler,导致了循环依赖的问题。\n\n要解决这个问题,可以通过以下两种方式:\n\n1. 使用 Setter 注入:将 Mapper 作为 BaseTypeHandler 的一个属性,并使用 Setter 注入。在配置文件中配置 Mapper 时,将 Mapper 注入到 BaseTypeHandler 中。\n\n举例:\n\njava\npublic class BaseTypeHandler {\n private Mapper mapper;\n\n public void setMapper(Mapper mapper) {\n this.mapper = mapper;\n }\n // 其他代码\n}\n\npublic interface Mapper {\n // Mapper 接口定义\n}\n\n<bean id="mapper" class="com.example.MapperImpl" />\n\n<bean id="baseTypeHandler" class="com.example.BaseTypeHandler">\n <property name="mapper" ref="mapper" />\n</bean>\n\n\n2. 使用 ApplicationContext 获取 Bean:在 BaseTypeHandler 中使用 ApplicationContext 获取 Mapper 的实例。\n\n举例:\n\njava\npublic class BaseTypeHandler {\n private Mapper mapper;\n\n public BaseTypeHandler(ApplicationContext context) {\n this.mapper = context.getBean(Mapper.class);\n }\n // 其他代码\n}\n\npublic interface Mapper {\n // Mapper 接口定义\n}\n\n<bean id="mapper" class="com.example.MapperImpl" />\n\n<bean id="baseTypeHandler" class="com.example.BaseTypeHandler">\n <constructor-arg ref="applicationContext" />\n</bean>\n\n<bean id="applicationContext" class="org.springframework.context.support.ClassPathXmlApplicationContext">\n <constructor-arg>\n <list>\n <value>spring-config.xml</value>\n </list>\n </constructor-arg>\n</bean>\n\n\n以上两种方式都可以解决循环依赖的问题,选择其中一种方式即可。
原文地址: https://www.cveoy.top/t/topic/pTYp 著作权归作者所有。请勿转载和采集!