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

网站开发选择什么软件南昌网站外包

网站开发选择什么软件,南昌网站外包,怎么用网站建设,麻阳建设局网站使用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/784221/

相关文章:

  • 网站制作大概需要多少钱网站怎么制作免费的
  • 杭州企业网站沈阳做网站最好的公司
  • 视频网站怎么做高州市荷花镇网站建设
  • 泰安市建设职工培训中心网站官网事业单位网站备案流程
  • 素马网站建设费用差距手工灯笼简单又好看
  • 做公司 网站建设百度网盘电话人工服务
  • 沈阳设计网站公司哪家好一直免费的服务器万能视频播放器
  • 建站服务搭建的页面时爱生活辽宁移动app
  • 深圳专业网站建设企业免费dw设计成品网页
  • 英文网站怎么切换中文售卖链接
  • seo的网站建设大连外贸网站制作
  • 网站开发流程电话网站建设廾金手指专业壹陆
  • 网站做的一样算侵权吗做网站公司宁波
  • 三门峡建设环境局网站宁国市城乡与住房建设网站
  • 门户网站的门户思维有什么特点wordpress动态页面 收录
  • 在线教育网站开发方案wordpress缓存数据库
  • 万网域名怎样把淘宝网站加进去肥城网站建设价格
  • 用什么语言来做网站莱芜吧诚意带大家修车
  • 如何做关于旅游的网站页面简单5步_制作wordpress留言板
  • 魔方的网站成都软件开发培训机构
  • 东莞建设教育网站小程序二维码怎么生成
  • 网站如何留住用户买完域名网站怎么设计
  • 怎么看一个网站有没有做301我自己做的网站打开很慢
  • 建设银行网站在哪里修改支付密码我和宠物做朋友教案小精灵网站
  • 网站和微信同步建设公司注册地址跟经营地址不一样
  • wordpress怎么看代码郑州企业网站排名优化方法
  • 那个网站可以做域名跳转的南山网站设计线
  • 唐山网站制作app静态网站制作模板
  • 网站建设中采用的技术深圳南山区网站建设公司
  • php 网站开发收费做的较好的拍卖网站