जेडीबीसी एपीआई इसके लिए एक उत्कृष्ट उदाहरण है। इस तरह आप उदाहरण के लिए में बाहर से कॉन्फ़िगर कर सकते हैं JDBC ड्राइवर एक गुण फ़ाइल:
driver = com.dbvendor.jdbc.Driver
url = jdbc:dbvendor://localhost/dbname
username = stackoverflow
password = youneverguess
..which आप उपयोग कर सकते हैं के रूप में:
Properties properties = new Properties();
properties.load(Thread.currentThread().getResourceAsStream("jdbc.properties"));
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
String username = properties.getProperty("username");
String password = properties.getProperty("password");
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, username, password);
हर JDBC ड्राइवर कार्यान्वयन मूल रूप से एक के अंदर DriverManager
में खुद को पंजीकृत करता है static
प्रारंभकर्ता ब्लॉक। यह अर्थात् Class#forName()
के दौरान निष्पादित किया जाता है।
package com.dbvendor.jdbc;
public class Driver implements java.sql.Driver {
static {
java.sql.DriverManager.registerDriver(new Driver());
}
private Driver() {
// ...
}
public boolean acceptsURL(String url) {
return url.startsWith("jdbc:dbvendor");
}
}
के बाद से DriverManager
मोटे तौर पर देखो इस तरह
private static final Set<Driver> drivers = new HashSet<Driver>();
public static void registerDriver(Driver driver) {
drivers.add(driver);
}
public static Connection getConnection(String url, String username, String password) throws SQLException {
for (Driver driver : drivers) {
if (driver.acceptsURL(url)) {
return driver.connect(url, username, password);
}
}
throw new SQLException("No suitable driver");
}
(यह वास्तव में पुराने जमाने Vector
उपयोग करता है) ... आप ड्राइवर खुद का दृष्टांत की आवश्यकता के बिना इसे से एक कनेक्शन प्राप्त कर सकते हैं !
इस तरह जेडीबीसी कोड अत्यधिक पोर्टेबल है। आप कोड को बदलने/हैक/पुनर्निर्माण की आवश्यकता के बिना अलग-अलग डीबी के उपयोगकर्ताओं के बीच डीबी को बदल सकते हैं या कोड वितरित कर सकते हैं।
यह केवल JDBC जो इस दृष्टिकोण का उपयोग करता है, यह भी अन्य एपीआई सर्वलेट एपीआई, ORM के हाइबरनेट/जेपीए की तरह, निर्भरता इंजेक्शन चौखटे, आदि वर्गों लोड करने के लिए प्रतिबिंब का उपयोग करता है के रूप में इस तरह के आधार पर बाहर से configureable propertiesfiles, एक्सएमएल config फ़ाइलें नहीं है और/या एनोटेशन। यह सब कोड को और अधिक पोर्टेबल और प्लग करने योग्य बनाता है।
हाइबरनेट और AspectJ फ्लाई पर कक्षाएं बनाने के उदाहरण हैं। –