当前位置: 首页 > news >正文

工行网站跟建设网站区别松原建设网站

工行网站跟建设网站区别,松原建设网站,网站开发培训中心,wordpress+评论使用SPI机制前后的代码变化 加载MySQL对JDBC的Driver接口实现 在未使用SPI机制之前,使用JDBC操作数据库的时候,一般会写如下的代码:// 通过这行代码手动加载MySql对Driver接口的实现类 Class.forName("com.mysql.jdbc.Driver") Dr…

使用SPI机制前后的代码变化

  • 加载MySQL对JDBC的Driver接口实现
    在未使用SPI机制之前,使用JDBC操作数据库的时候,一般会写如下的代码:
    // 通过这行代码手动加载MySql对Driver接口的实现类
    Class.forName("com.mysql.jdbc.Driver")
    DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/study", "root", "root");
    
    在使用了SPI机制之后,就直接可以调用DriverManager.getConnection()方法获取连接了。
  • SLF4J查找日志门面实现
    在未使用SPI机制之前,SLF4J日志门面在查找具体的日志实现时,需要每个实现提供一个叫org.slf4j.com.impl.StaticLoggerBinder.class类,这里其实就跟SPI机制有点类似了,这个类实现了和SPI机制中的配置文件的功能,通过这个类来实现和具体实现的绑定关系。
    20240721170318
    使用了SPI机制之后则是通过SLF4JServiceProvider类来实现和具体实现的绑定关系。
    20240721171037
    20240721174312

SPI代码实现案例

假设现在有一个Plugin的接口,调用方通过PluginFactory中的installPlugins方法来加载实现实现类,并进行调用,代码如下所示:

// Plugin接口
public interface Plugin {boolean install(Map<Object, Object> context);
}public class PluginFactory {public void installPlugins() {Map<Object, Object> context = new HashMap<>();context.put("_beans", new ArrayList<>());context.put("_version", "1.0.0");context.put("_aspects", new HashMap<>());// 这里通过ServiceLoader加载Plugin的实现类ServiceLoader<Plugin> loader = ServiceLoader.load(Plugin.class);for (Plugin plugin : loader) {plugin.install(context);}}public static void main(String[] args) {PluginFactory factory = new PluginFactory();factory.installPlugins();}
}

Plugin接口实现者的代码:

public class LogPlugin implements Plugin {private static final Logger LOGGER = LogManager.getLogger();@Overridepublic boolean install(Map<Object, Object> context) {LOGGER.info("Login plugin is initiating...");return true;}
}

20240721214035
20240721214130

使用SPI机制有个好处就是:当需要切换不同的实现类时,无需对业务代码进行适配修改,直接将Maven配置里面的实现依赖切换即可,对于实际的环境可能就是直接将对应的jar包替换到对应的lib目录下,然后重启服务即可。

SPI代码实现原理

ServiceLoader的load方法实现原理是通过接口的全限定名称去读取META-INF/services路径下的文件,获取文件里面实现类的全限定名,然后加载该类,并通过反射的方式调用构造器获取实现类的实例,然后返回,如下图所示:
20240721215047

20240721214737

20240721215650

20240721214937

http://www.yayakq.cn/news/892789/

相关文章:

  • 网站有风险提示怎么办小女孩做网站
  • 寿光网站优化中国建设银行信用卡网站
  • 长沙长沙网站建设wordpress阅读积分
  • 做网站的准备什么360收录提交入口
  • 永康网站建设制作自助网站建设公司电话
  • 四川建设厅电话网站seo优化的作用
  • 辽宁住房和建设厅网站首页马云谈2025的房价3500
  • 网站建设分哪几种做业精灵官方网站
  • 西安建设高端网站网站中图片加水印
  • 网站源代码怎么下载厦门网站建设培训机构
  • 做标书要不要做网站电商平台设计包括哪些内容
  • 关于个人工作室网站模板dede换网站
  • .net 网站开发项目结构手机怎样建立网站
  • 威海网站建设排名榜嘉兴市做网站优化
  • 网站建设中 什么意思襄阳网站建设首选公司哪家好
  • 在线动画手机网站模板下载安装苏州app开发
  • 天津网站建设推广服务网站定制化开发
  • 企业手机建站系统青岛销售系统app开发
  • 一起做单网站怎么样门户网站建设工作总结
  • 长春网站优化方案如何自己建公司网站
  • 站长 网站对比十大软件公司
  • 干网站建设销售怎么样互联网怎么打广告推广
  • 网站备案容易通过吗旅游网站哪个做的好
  • 企业如何通过地方网站宣传网站网络营销的10个特点
  • 做网站获流量做网站实名认证有什么用
  • 生小孩去什么网站做登记wordpress支持建多个站点吗
  • wordpress课件站模板商城推广文案
  • 连云港网站优化方案云空间wordpress
  • 网站开发开源架构php 数据录入网站
  • 遵义市网站制作凡科网账号怎么注销