Effective Java中提到了服务提供者框架, 书中是这样描述的:
服务提供者框架中有三个重要的组件:
1)服务接口(Service Interface), 这是提供者实现;
2)提供者注册API(Provider Registration API), 这是系统用来注册实现, 让客户端访问它们的;
3)服务访问API(Service Access API), 是客户端用来获取服务实例的.
第四个组件是可选的:
4)服务提供者接口(Service Provider Interface), 这些提供者负责创建其服务实现的实例.如果没有服务提供者接口, 实现就按照类名注册, 并通过反射方式进行实例化.
书中提到了JDBC用到了服务提供者框架模式, 获得MySql数据库连接的代码如下:
Class.forName(com.mysql.jdbc.Driver.class.getName());
Connection connection = DriverManager.getConnection("jdbc://url", "username", "password");
其中, com.mysql.jdbc.Driver就是服务提供者框架中的服务提供者接口. java.sql.Connection是服务接口. DriverManager.registerDriver()是提供者注册API. DriverManager.getConnection()是服务访问API.
java.sql.Driver 接口如下:
com.mysql.jdbc.Driver 类如下:
com.mysql.jdbc.Driver实现了java.sql.Driver接口, 但是有个问题:
java.sql.Driver接口里有个方法:Connectionconnect(String url, java.util.Properties info)
throws SQLException; 但是在com.mysql.jdbc.Driver类里面没有找到这个方法的实现.
还望高手赐教.