mybatisplus生成的mapper和bean,后置处理器实现根据bean获取mapper

package cc.ct.business.service.processor;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.mapper.MapperFactoryBean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** @author congrihe* @date 2023年02月21日 15:01*/
@Component
@Slf4j
public class MyBatisCommonMapper implements BeanPostProcessor {private final static Map<String, BaseMapper<?>> MAPPER_INTERFACE = new ConcurrentHashMap<>();private final static Map<String,String> FACTORY_NANE = new ConcurrentHashMap<>();@SuppressWarnings("unchecked")public static <T> BaseMapper<T> getMapper(Class<T> t){return (BaseMapper<T>) MAPPER_INTERFACE.get(t.getName());}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof  BaseMapper){String mapperInterface = FACTORY_NANE.get(beanName);MAPPER_INTERFACE.put(mapperInterface,(BaseMapper<?>) bean);}return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);}@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if (bean instanceof MapperFactoryBean){Class<?> mapperInterface = ((MapperFactoryBean<?>) bean).getMapperInterface();Type[] actualTypeArguments = ((ParameterizedType) (mapperInterface.getGenericInterfaces())[0]).getActualTypeArguments();String typeName = actualTypeArguments[0].getTypeName();FACTORY_NANE.put(beanName,typeName);}return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);}}

调用方式

 BaseMapper<?> mapper = MyBatisCommonMapper.getMapper(Bean.class);

mybatisplus生成的mapper和bean,后置处理器实现根据bean获取mapper相关推荐

  1. Spring Bean 后置处理器

    转载自  Spring Bean 后置处理器 Spring--Bean 后置处理器 BeanPostProcessor 接口定义回调方法,你可以实现该方法来提供自己的实例化逻辑,依赖解析逻辑等.你也可 ...

  2. Spring Bean 后置处理器PostProcessor

    BeanPostProcessor 接口定义回调方法,可以实现该方法来提供自己的实例化逻辑,依赖解析逻辑等.可以在 Spring 容器通过插入一个或多个 BeanPostProcessor 的实现来完 ...

  3. Spring 详解Bean的后置处理器

    Bean的后置处理器详解: Spring当中的后置处理器是Spring体用的一个扩展点,开发者只要去实现,Spring当中的BeanPostProcessor接口,那么就能插手SpringBean实例 ...

  4. Spring学习笔记八--Bean生命周期和后置处理器

    为什么80%的码农都做不了架构师?>>>    Bean生命周期和后置处理器 IOC容器的bean生命周期 1.构造器或工厂方法建立bean实例 2.bean属性赋值,引用其他bea ...

  5. SringIOC中Bean的后置处理器

    Bean后置处理器 Spring提供的特殊的Bean 1. Bean后置处理器允许在调用初始化方法 即:bean节点init-method属性对应的方法的前后,对Bean进行额外的处理. 2.Bean ...

  6. Spring中Bean的后置处理器

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-post-processors.html: Bean后置处理器 BeanPostProce ...

  7. Spring容器创建流程(5)bean后置处理之注册

    registerBeanPostProcessors 注册bean的后置处理器(以前的执行流程可在系列文章中查看),注意 beanFactoryPostProcessor 是 bean工厂的后置处理器 ...

  8. spring的后置处理器(未完结版)

    学习spring源码也有一阶段时间了,是时候收货的季节了,打算写几篇博客,把自己的知识沉淀下来.在学习spring的源码之前,别人问我spring什么牛逼.我会毫不犹豫的说出AOP,IOC啊.但是看看 ...

  9. Spring学习理解---后置处理器

    Spring学习理解之-后置处理器 spring后置处理器有几种?后置处理器的作用 后置处理器有两种: (1)bean的后置处理器:这种处理器会对容器中的bean进行后处理,对bean进行增强 (2) ...

最新文章

  1. 3399引擎_RK3399开发板 AIO-3399C六核高性能主板
  2. SVN使用log,list,cat,diff命令查看特定文件版本信息
  3. 【Linux】一步一步学Linux——wc命令(52)
  4. nios ii小实验——第一个demo指导书
  5. python超市买苹果_官网购买的iPhone12pro还没发货?试着用Python快速入手
  6. 百度大脑EasyDL专业版挑战赛正式开启,挑战没有做不到的模型!
  7. solidity event是什么
  8. 《Unity 4 3D开发实战详解》一6.3 粒子系统
  9. excel字符串和单元格拼接_Excel工作表中带单位求和的4个技巧,不掌握就真的Out了!...
  10. Ubuntu 定时锁屏改进
  11. eeglab基础学习
  12. 哈尔滨计算机工程黑icp备,关于组织我校青年教师及研究生参加2017年中、俄、蒙、德计算机科学、计算机工程及教育技术国际夏令营活动的通知...
  13. 字符串匹配算法之BF算法(即暴力算法)
  14. canOpen学习六之canOpen应用实现主从机PDO循环同步通信
  15. Android文件目录及文件访问权限等详解
  16. 域名系统就是域名服务器吗,域名系统五个服务器有什么区别吗
  17. dosbox汇编环境的安装和使用
  18. 【笔试】三七互娱笔试 web后端工程师
  19. 考研咨询周是什么?应该如何咨询?
  20. java抽象类创建_Java抽象类

热门文章

  1. 什么是API?为什么要提供API?
  2. BUUCTF-Crypto-看我回旋踢题解
  3. IDEA的项目目录显示0% classes,0% lines covered的解决方法
  4. 海量数据将亮相“全栈式中间件信息技术应用创新峰会”
  5. java jar 没有主清单_java运行jar命令提示没有主清单属性
  6. spring 容器中bean的扩展点记录 —— 个人学习记录
  7. cpython和python语言上有什么不同_CPython和和Python是什么关系?老男孩
  8. 【通俗易懂】Vue如何使用百度地图,通过vue-baidu-map插件实现地图功能【文档使用介绍】
  9. Type ‘org.springframework.cloud.gateway.route.RouteDefinition‘ has no property ‘id‘
  10. 【解决报错】java.sql.SQLException Access denied for user ‘root‘@‘localhost‘ (using password YES)