如何做建材网站的线下推广,怎么做动漫原创视频网站,网站做百度排名,网站建设合同交什么印花税SpringBoot前置知识-SPI接口
介绍 Java中SPI是一种服务发现机制#xff0c;或者说是一种思想#xff0c;亦是一种约定。其实JDK中的JDBC就是使用了这种用思想#xff0c;JDBC在JDK中只定义了接口#xff0c;并没有实现类#xff0c;连接什么数据库就要引入什么数据库的驱…SpringBoot前置知识-SPI接口
介绍 Java中SPI是一种服务发现机制或者说是一种思想亦是一种约定。其实JDK中的JDBC就是使用了这种用思想JDBC在JDK中只定义了接口并没有实现类连接什么数据库就要引入什么数据库的驱动。 SPI通过在ClassPath路径下的META-INF/services文件夹下通过创建文件实现服务注册文件名为要实现接口的全限定名内容为实现类的全限定名。 实践
分别创建三个maven项目JDBCModule,MySQLModule,OracleModule,其中MySQLModule,OracleModule实现JDBCModule中的JdbcService接口
JDBCModule
创建一个JdbcService接口
package com.jdbc;
/*** Author * Date 2024/5/23 21:38*/
public interface JdbcService {void connection();
}pom文件中引入MySQLModule,OracleModule打成的jar包 !--oracle实现jdbc接口--dependencygroupIdcom.oracle/groupIdartifactIdOralceModule/artifactIdversion1.0-SNAPSHOT/version/dependency!--MySQL实现jdbc接口--dependencygroupIdcom.mysql/groupIdartifactIdMySqlModule/artifactIdversion1.0-SNAPSHOT/version/dependencyMySQLModule
引入JDBCModule打成的jar包 dependencygroupIdcom.jdbc/groupIdartifactIdJDBCModule/artifactIdversion1.0-SNAPSHOT/version/dependency定义JdbcService的实现类
package com.mysql;
import com.jdbc.JdbcService;/*** Author * Date 2024/5/23 21:41*/
public class MySqlServiceImpl implements JdbcService {Overridepublic void connection() {System.out.println(这是Mysql...);}
}在resources目录下创建MATE-INF文件夹在MATE-INF文件夹下创建文件夹命名为要实现接口的权限的名当前项目下即JdbcService的全限定名 com.jdbc.JdbcService 内容为实现类的全限定名即MySqlServiceImpl的全限定名com.mysql.MySqlServiceImpl。这样接口就能知道实现类了。
OracleModule
和MySQLModule同理
使用 这样在JDBCModule中就可以找到实现类了或者将JDBCModule打成jar包引入到其他项目中也可以找到接口的实现类了。通过ServiceLoad加载SPI接口的实现 public class AppMain {public static void main(String[] args) {ServiceLoaderJdbcService load ServiceLoader.load(JdbcService.class);IteratorJdbcService iterator load.iterator();while (iterator.hasNext()){iterator.next().connection();}}
}这是Oracle...
这是Mysql...Process finished with exit code 0
总结
SpringBoot的核心思想是“约定大于配置”由此可以看出Spring发展为SpringBoot是必然结果。技术在变但是思想不会变。