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

建网站模板厦门模板建站

建网站模板,厦门模板建站,大专电子商务主要学什么,盘多多百度网盘搜索引擎目录 什么是spi API与SPI区别 SPI实现案例 SPI应用场景 1. JDBC场景 2. ShardingSphere场景 3. Spring 场景 4. SLF4J 日志门面 场景 Java.util.spi下提供了SPI机制#xff0c;SPI机制#xff08;Service Provider Interface)其实源自服务提供者框架#xff08;Serv…目录 什么是spi API与SPI区别 SPI实现案例 SPI应用场景 1. JDBC场景 2. ShardingSphere场景 3. Spring 场景 4. SLF4J 日志门面 场景 Java.util.spi下提供了SPI机制SPI机制Service Provider Interface)其实源自服务提供者框架Service Provider Framework参考[EffectiveJava]page6)是一种将服务接口与服务实现分离以达到解耦、大大提升了程序可扩展性的机制。Java SPI 是基于接口的编程策略模式约定配置文件组合实现的动态加载机制能够很方便的为某个接口寻找服务实现的机制。 什么是spi SPI 全称Service Provider Interface是Java提供的一套用来被第三方实现或者扩展的接口它可以用来启用框架扩展和替换组件。 面向的对象的设计里我们一般推荐模块之间基于接口编程模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类就违反了可拔插的原则如果需要替换一种实现就需要修改代码。为了实现在模块装配的时候不用在程序里动态指明这就需要一种服务发现机制。java spi就是提供这样的一个机制为某个接口寻找服务实现的机制。这有点类似IOC的思想将装配的控制权移到了程序之外。这是一种JDK内置的一种服务发现的机制用于制定一些规范实际实现方式交给不同的服务厂商。 具有解耦、可拔插、面向接口编程、动态类加载等特点。 当服务的提供者提供了一种接口的实现之后需要在classpath下的 META-INF/services/ 目录里创建一个以服务接口命名的文件这个文件里的内容就是这个接口的具体的实现类。当其他的程序需要这个服务的时候就可以通过查找这个jar包一般都是以jar包做依赖的META-INF/services/中的配置文件配置文件中有接口的具体实现类名可以根据这个类名进行加载实例化就可以使用该服务了。JDK中查找服务的实现的工具类是java.util.ServiceLoader。 spi的不足点 不能按需加载需要遍历所有的实现并实例化然后在循环中才能找到我们需要的实现。如果不想用某些实现类或者某些类实例化很耗时它也被载入并实例化了这就造成了浪费。获取某个实现类的方式不够灵活只能通过 Iterator 形式获取不能根据某个参数来获取对应的实现类。Spring 的BeanFactoryApplicationContext 就要高级一些了。。多个并发多线程使用 ServiceLoader 类的实例是不安全的。 API与SPI区别 API Application Programming Interface在大多数情况下都是实现方制定接口并完成对接口的实现调用方仅仅依赖接口调用且无权选择不同实现。从使用人员上来说API 直接被应用开发人员使用。 SPI Service Provider Interface是调用方来制定接口规范提供给外部来实现调用方在调用时则选择自己需要的外部实现。 从使用人员上来说SPI 被框架扩展人员使用。 SPI实现案例 public interface AnimalSay {void say(); } 定义一个AnimalManagerLoader Data public class AnimalManagerLoader {private static final AnimalManagerLoader INSTANCE new AnimalManagerLoader();private final ListAnimalSay animalSays;private AnimalManagerLoader() {animalSays load();}/*** 通过SPI加载实现类*/private ListAnimalSay load() {ArrayListAnimalSay animalSays new ArrayList();IteratorAnimalSay iterator ServiceLoader.load(AnimalSay.class).iterator();while (iterator.hasNext()){animalSays.add(iterator.next());}return animalSays;}public static AnimalManagerLoader getInstance() {return INSTANCE;} } 通过AnimalManagerLoader中的load方法去加载对应的实现类封装到List集合中调用如下 public static void main(String[] args) {AnimalManagerLoader animalManagerLoader AnimalManagerLoader.getInstance();ListAnimalSay animalSays animalManagerLoader.getAnimalSays();for (AnimalSay animalSay : animalSays) {animalSay.say();}} 此时提供声音的厂家就需要实现这个接口 /*** 狗狗的声纹*/ public class DogSay implements AnimalSay {public void say() {System.out.println(wang wang ~);} }/*** 猫咪的声纹*/ public class CatSay implements AnimalSay {Overridepublic void say() {System.out.println(miao miao ~);} } 实现类定义了就需要在 /META-INF/services 中定义一个 com.myjszl.animal.api.AnimalSay文件内容如下 com.myjszl.dog.api.DogSay com.myjszl.dog.api.CatSay SPI应用场景 SPI扩展机制应用场景有很多比如Common-LoggingJDBCDubbo、ShardingSphere等等。 1. JDBC场景 java中定义的java.sql.Driver接口并没有具体的实现实现方式而是交给不同的服务厂商 在MySQL的jar包mysql-connector-java-6.0.6.jar中可以找到META-INF/services目录该目录下会有一个名字为java.sql.Driver的文件文件内容是com.mysql.cj.jdbc.Driver这里面的内容就是针对Java中定义的接口的实现。 PostgreSQL的jar包PostgreSQL-42.0.0.jar中也可以找到同样的配置文件文件内容是org.postgresql.Driver这是PostgreSQL对Java的java.sql.Driver的实现。 2. ShardingSphere场景 在ShardingSphere中为了实现分布式事务提供了一个接口ShardingTransactionManager但是在其架构中并未对其做出具体的实现而是交给不同的厂商去实现比如JTA强一致性事务的XAShardingTransactionManager在其中META-INF/services就有一个org.apache.shardingsphere.transaction.spi.ShardingTransactionManager文件如下图 以上只是简单的列举了几个场景实际应用场景很多比如Spring、Spring Boot 中都有用到SPI设计。 3. Spring 场景 Spring中大量使用了SPI比如对servlet3.0规范对ServletContainerInitializer的实现、自动类型转换Type Conversion SPI(Converter SPI、Formatter SPI)等 4. SLF4J 日志门面 场景 SLF4J加载不同提供商的日志实现类比如log4j、log4j2、logback.....
http://www.zqtcl.cn/news/729982/

相关文章:

  • 外贸网站建设行业发展情况北京 企业网站开发
  • dedecms 倒计时 天数 网站首页创业众筹平台
  • 隆尧建设局网站wordpress彻底禁用google
  • 自己做网站需要什么技能比邻店网站开发
  • 网站建设杭州最便宜劳务公司找项目平台
  • jsp做网站毕业设计安徽省交通运输厅章义
  • 企业网站有哪几个类型广州做网站市场
  • 直播网站建设开发上海注册公司多少钱
  • 可以兼职做设计的网站备案期间能否做网站解析
  • 做发帖的网站代码seo联盟平台
  • 铁威马 Nas 做网站百度广告代运营
  • 有没有帮别人做网站小说关键词生成器
  • 那些开店的网站是自己做的吗装修平台排行榜前十名
  • 重庆智能网站建设价格毕业设计做系统跟做网站哪个容易
  • 淘宝美工做兼职的网站多多返利网站建设
  • 如何承接设计网站建设电商平台开发流程
  • 安康做网站简洁高端的wordpress个人博客
  • 酒店网站建设协议手机怎么做销售网站
  • 屏蔽网站接口js广告seminar
  • 谁有手机网站啊介绍一下wordpress 流量插件
  • 杭州网站公司google网站建设
  • 莱芜住房和城乡建设厅网站网站头部设计
  • 织梦响应式茶叶网站模板邯郸最新通告今天
  • 深圳公司网站改版通知做网站分类链接
  • 电子商务网站建设答案网络运营与维护
  • 网站登陆怎么做网站app的区别
  • 获取网站缩略图工信部2017网站备案
  • 有哪些网站可以做ps挣钱自己制作游戏
  • 旅游网站开发团队四川住房和城乡建设网站
  • 网站框架设计商城网站制作需要多少费用