知识点
-
什么是插件
-
如何自定义插件
-
插件实现原理
什么是插件
相信大家平时肯定使用过很多插件,比如eclipse插件、idea的插件、chrome浏览器插件等,简单地说,插件就是一种扩展,它不属于核心功能,没有它不影响我们正常使用,有了它能够让我们使用起来更方便,属于锦上添花。以下引用知乎一篇文章部分内容:
主程序如果希望自身的功能可以被扩展,其需要:
-
提供一组服务 (Service Interface)。其提供(约束)了插件对主体能力可控制的边界。服务定义的越精细,插件控制的粒度越小,能力越大,但耦合度和复杂度也越高。
-
定义一种扩展契约 (Plug-In Interface),其描述了插件应该如何设计以便于主程序发现。并通过插件管理模块 (Plug-In Manager) 来发现、维护插件。插件通过实现主程序规定的扩展契约(通常是一个接口),标明自己的身份,并接收来自主程序的事件响应。通过调动主程序提供的服务,实现和主程序的交互。这一过程,通常都是被主程序以 SDK (Software Development Kit) 的形式封装。
一款好的产品必然有一套灵活的扩展机制,作为目前国内互联网公司用得最多的持久化框架,mybatis 自然也提供了一套扩展机制,也就是插件。
如何自定义插件
在介绍完插件的概念之后,我们来看一下如何在 mybatis 中自定义插件。目前 mybatis 支持4种类型的插件,分别为 Executor、StatementHandler、ResultSetHandler、ParameterHandler。什么意思呢?就是说我们目前自定义插件,只能对这4种类型的方法做拦截,这里基本上涵盖了参数化、sql执行前后、结果集处理,mybatis核心逻辑也就这么多了,所以是足够用的。下面我们来自定义一个插件,实现对Executor的拦截,在查询之前打印"hello"。
1) 先定义一个类,实现拦截器功能
public class MyPlugin implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
return null;
}
@Override
public Object plugin(Object o) {
return null;
}
@Override
public void setProperties(Properties properties) {
}
}
复制代码
2)由于我们要对 Executor 的查询进行拦截,所以在其上添加对应的拦截注解说明,当然这里是可以拦截多种接口的
@Intercepts(
value = {
@Signature(type = Executor.class, method = “query”, args={MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
}
)
public class MyPlugin implements Interceptor {
…
}
复制代码
3) 加一个Properties类型成员用来接收配置中设置的值,并在执行具体路基之前输出配置中对应的内容,当然你也可以直接写死输出hello
@Intercepts(
value = {
@Signature(type = Executor.class, method = “query”, args={MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
}
)
public class MyPlugin implements Interceptor {
private Properties properties = new Properties();
@Override
public Object intercept(Invocation invocation) throws Throwable {
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
86403950)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-lXiB2Ql3-1710886403950)]