ओपी कुछ सामान्य मामलों में कार्यान्वयन के बारे में एक सामान्य प्रश्न पूछता है।
कई जवाब में तृप्त के रूप में लॉग इन करना, SLF4J
इंटरफ़ेस देता है और log4j-slf4j
कार्यान्वयन देता है।
जब आप निम्न कथन का उपयोग करें:
public static ILoggerFactory getILoggerFactory() {
if (INITIALIZATION_STATE == UNINITIALIZED) {
synchronized (LoggerFactory.class) {
if (INITIALIZATION_STATE == UNINITIALIZED) {
INITIALIZATION_STATE = ONGOING_INITIALIZATION;
performInitialization();
}
}
}
switch (INITIALIZATION_STATE) {
case SUCCESSFUL_INITIALIZATION:
return StaticLoggerBinder.getSingleton().getLoggerFactory();
}
...
}
:
हम getLogger
विधि LoggerFactory
class में घोषित से Logger
प्राप्त करने की कोशिश:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
private static final Logger LOG = LoggerFactory.getLogger(FooBarClass.class);
...
LOG.debug("Foobar");
यह क्या हो रहा है है तो जादू उस कथन पर होता है:
return StaticLoggerBinder.getSingleton().getLoggerFactory();
क्योंकि क्लासपाथ जानता है कि आपने कार्यान्वित किया है, क्यों StaticLoggerBinder
कार्यान्वयन is provided by log4j
। हम देख सकते हैं के रूप में, log4j
अपने स्वयं के कार्यान्वयन के साथ एक प्रदान करता है:
private final ILoggerFactory loggerFactory;
...
private StaticLoggerBinder() {
loggerFactory = new Log4jLoggerFactory();
}
और बस हो गया!
हठ
जेपीए/हाइबरनेट भाग के लिए, आप hibernate-jpa-api
और hibernate-*
(कोर, entitymanager, आदि) को शामिल करने के लिए है।
import javax.persitence.EntityManagerFactory
import javax.persitence.Persistence;
...
private static EntityManagerFactory EMF = Peristence.createEntityManagerFactory("foobar", null);
List
और ArrayList
का सवाल है, अपने classpath इंटरफेस और जार आप आयात करना कार्यान्वयन धन्यवाद के साथ तंग आ गया है:
मान लीजिए कि आप बनाने के लिए एक EntityManagerFactory
चाहते हैं।
EntityManagerFactory
hibernate-jpa-api
से आता है जहां हमारे पास Persistence
class है। हम देख सकते हैं कि createEntityManagerFactory
विधि पहले सभी प्रदाताओं सूचीबद्ध करती है और उनमें से प्रत्येक के लिए, createEntityManagerFactory
निकाल दिया जाता है। यह वह जगह है जहां hibernate
आता है। यह HibernatePersistenceProvider
प्रदान करता है जो implements the PersistenceProvider
class प्रदान करता है।
इस प्रकार Hibernate
इंजेक्शन दिया गया है।
क्या आप 'log4j-over-slf4j' मॉड्यूल के बारे में बात कर रहे हैं? – Andremoniy
मेरे मामले में, 'sl44' के माध्यम से' log4j' का उपयोग करने के लिए, मेरे पास निम्नलिखित JARs हैं: 'slf4j-api', 'log4j-core' और' log4j-sl4j-impl' – Kevin
संभावित डुप्लिकेट [slf4j कैसे बाध्य करता है कार्यान्वयन? क्या यह वास्तव में संकलन समय के दौरान ऐसा करता है?] (Http://stackoverflow.com/questions/17829995/how-does-slf4j-bind-to-implementation-does-it-really-do-so-during-compile-time) – sm4