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

jtbc网站内容管理系统网站开发教程

jtbc网站内容管理系统,网站开发教程,网站空间价格,随州网1. 简单的门面设计模式的使用1.1 首先实现一个统一的门面的接口,实现一个Start 方法package club.shengsheng.insight.input;public interface ServerFacade {void start() ; }1.2 具体的类继承这个接口,实现start方法package club.shengsheng.insight;i…

1. 简单的门面设计模式的使用

1.1 首先实现一个统一的门面的接口,实现一个Start 方法

package club.shengsheng.insight.input;public interface ServerFacade {void start() ;
}

1.2 具体的类继承这个接口,实现start方法

package club.shengsheng.insight;import club.shengsheng.insight.input.ServerFacade;public class MySQL implements ServerFacade {void initData(){System.out.println( "初始化MYSQL" );}void checkLog(){System.out.println("校验日志,恢复可能没有提交的数据");}void unlock(){System.out.println("释放锁");}void listenPort(){System.out.println("监听端口");}@Overridepublic void start() {this.initData();this.checkLog();this.unlock();this.listenPort();}
}

2  Maven 插件的API就是 maven 的门面,接下来使用门面模式 实现自定义插件的热加载

// 首先在一个项目中定义出插件的APIpublic interface MyPlugin {void beforeGetTime() ;
}public class Main {public static void main(String[] args) {System.out.println("Hello, World!");}
}

目录如下

2.1 具体的插件工程 引入这个依赖,实现具体的插件逻辑

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>count_plugin</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.example</groupId><artifactId>my_plugin_api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies></project>

2.2 实现这个依赖工程

工程架构


2.3  继承MyPlugin 接口 实现 方法

package org.example.insight;
import java.util.concurrent.atomic.AtomicInteger;public class CountPlugin implements MyPlugin {AtomicInteger count = new AtomicInteger(0);@Overridepublic void beforeGetTime() {System.out.println("CountPlugin beforeGetTime count: "+count.incrementAndGet() );}
}

2.3 实现这个依赖工程 , 实现一个计数的逻辑

同时在resources的资源目录中写出相应的接口相对类路径

 2.4 一个SpringBoot工程中引入这个计数插件的依赖,并实现一个http接口、使用反射实现对插件字节码的动态加载

@RestController
@RequestMapping("/test")
public class TestController {@Resourceprivate ThreadLocal<Integer> localInt;private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");private MyPlugin plugin;@GetMapping("/time")public String getTime() {if(plugin != null) {plugin.beforeGetTime();}return LocalDate.now().format(dateTimeFormatter);}// 实现了我们插件的jar包,这个文件叫做 genyon.plugin  这个文件的内容就是实现myPlugin的全类名// 加载插件的接口 count_plugin-1.0-SNAPSHOT.jar// 门面设计模式@GetMapping("/pluginLoad/{path}")public String loadPlugin(@PathVariable("path") String path  ) {File file = new File(path);try (URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{file.toURI().toURL()});InputStream systemResourceAsStream = urlClassLoader.getResourceAsStream("genyon.plugin");) {String fullClassName = new String(systemResourceAsStream.readAllBytes());Class<?> abc = urlClassLoader.loadClass(fullClassName.trim());Constructor<?> constructor = abc.getConstructor();// 实现的my plugin的jar包的对象plugin = (MyPlugin) constructor.newInstance();return "记载成功: "+ plugin.toString();}catch (Exception e) {return "加载失败: "+ e.getMessage();}}

 2.5 并将插件打包后放入 SpringBoot工程目录的相对路径中。

2.6 调用接口实现 动态加载,

1. 首先调用pluginLoad接口 实现 对插件的动态加载

结果如下

2. 调用相应的第一返回当前时间戳的接口,可以看到返回了时间戳前,还打印了计数插件的计数结果,说明插件顺利加载。

任何一个大的插件项目的原理都是如此,都是先定义一个插件,让第三方实现这个插件,我们通过约定将插件加载进来,并实现一些相应的功能。

http://www.dtcms.com/wzjs/16110.html

相关文章:

  • 适合女生做的网站主题网络营销的方式包括
  • 南昌网站建设方案报价网络营销就业前景和薪水
  • 学院网站建设规划线下引流的八种推广方式
  • 高中生做那个的网站链接制作
  • 进入网站前如何做环境检测口碑营销的概念是什么
  • 长沙做手机网站建设seo优化关键词放多少合适
  • wordpress可以关闭不南昌seo营销
  • 网站维护 一年关键词排名优化官网
  • 地方招聘网站如何做推广竞价sem托管
  • 运维 网站开发搜狗收录查询
  • 怎么做网站流量赚钱东莞网站推广优化公司
  • 网站的按钮怎么做西安百度推广优化
  • 洛阳seo博客陕西优化疫情防控措施
  • 广州网站改版哪家好html网页制作网站
  • 网站制作网络推广关键词排名人民日报最新消息
  • 平顶山网站建设服务公司网站优化建议怎么写
  • 网站建设策划书选题百度代运营公司
  • 网页设计教程课本课后题答案seo是指什么岗位
  • 重庆工程网站建设app开发网站
  • 自己在电脑上建文档做网站怎么做阿里域名购买网站
  • 开发者模式对手机有伤害吗网站seo视频狼雨seo教程
  • 自己做网站代码百度销售平台
  • 商务网站建设多少钱优化落实新十条措施
  • 企业做网站的费用如何科目真正免费的网站建站平
  • 网站开发语言哪个好黑帽seo是什么
  • 广 做网站蓝光电影下载seo教程搜索引擎优化入门与进阶
  • 网站用的什么字体优化防疫政策
  • 天津做网站找哪家公司好网站网络推广运营
  • 金华永康义乌网站建设阿里云域名注册查询
  • 建设工程项目管理网站google秒收录方法