@ConditionalOnClass
एनोटेशन कार्य वास्तव में कैसे करता है?कैसे वसंत-बूट @ConditionalOnClass काम करता है?
मेरा लक्ष्य केवल एक विशिष्ट बीन लोड करना है यदि jar
इस वर्ग को क्लासपाथ में शामिल किया गया है।
मैं हालांकि मैं @ConditionalOnClass(MyService.class)
के साथ एक @Bean
व्याख्या और वैकल्पिक के रूप में Maven में निर्भरता की घोषणा कर सकता है:
<dependency>
<groupId>de.my</groupId>
<artifactId>my-framework<artifactId>
<optional>true</optional>
</dependency>
@Bean
@ConditionalOnClass(MyService.class)
public MyConditionalBean statistics() {
return new MyConditionalBean();
}
अब, किसी को भी हो रही my-framework
निर्भरता के रूप में है कि सेम स्वचालित रूप से तार मिलना चाहिए। लेकिन निर्भरता वाले किसी को भी इसे छोड़ना नहीं चाहिए।
Caused by: java.lang.ClassNotFoundException: de.MyService.class
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) ~[catalina.jar:7.0.50]
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) ~[catalina.jar:7.0.50]
तो मैं शायद कुछ गलत कर रहा हूँ:
लेकिन जब मैं अनुप्रयोग शुरू, मैं निम्नलिखित त्रुटि मिलती है। फिर मैं निर्भरता जार और कक्षापथ में निहित कक्षाओं पर बीन सशर्त कैसे बना सकता हूं?
वसंत डॉक्स से:
/**
* The classes that must be present. Since this annotation parsed by loading class
* bytecode it is safe to specify classes here that may ultimately not be on the
* classpath.
*/
लेकिन त्रुटि विभिन्न राज्यों ...
यदि आप इसे शीर्ष स्तर की कक्षा में डालते हैं तो मैं क्लास लोडिंग समय पर कक्षा को खींचने के अलावा छोड़ दूंगा। वह कक्षा का उपयोग करते समय है। स्ट्रिंग शाब्दिक के रूप में इसका उपयोग करना इसे रोकता है। –