वसंत ढांचे एक्सएमएल-आधारित कॉन्फ़िगरेशन के साथ एनोटेशन-आधारित कॉन्फ़िगरेशन ओवरराइड कर सकते हैं? मुझे एक बीन की निर्भरता को बदलने की जरूरत है जो पहले ही एनोटेशन के माध्यम से परिभाषित है और मैं बीन का लेखक नहीं हूं।वसंत ढांचे एक्सएमएल-आधारित विन्यास के साथ एनोटेशन-आधारित कॉन्फ़िगरेशन ओवरराइड कर सकते हैं?
18
A
उत्तर
14
यह ठीक होना चाहिए। एक वसंत बीन संदर्भ आपको "बाद वाले" परिभाषाओं को "पहले वाले" ओवरराइड करने के साथ, बीन्स को फिर से परिभाषित करने की अनुमति देता है। यह एक्सएमएल परिभाषित सेम के साथ-साथ एनोटेशन-परिभाषित बीन्स पर भी लागू होना चाहिए, भले ही वे मिश्रित हों।
उदाहरण के लिए, यदि आप
@Configuration
public class MyAnnotatedConfig {
@Bean
public Object beanA() {
...
}
}
<bean class="com.xyz.MyAnnotatedConfig"/>
<bean id="beanA" class="com.xyz.BeanA"/>
है इस मामले में, beanA
के XML परिभाषा पूर्वता लेना चाहिए।
16
मुझे नहीं पता था कि वसंत कॉन्फ़िगरेशन मिश्रण कर सकता है। यहां विस्तृत और बहुत उपयोगी उदाहरण है।
बीन 1 वास्तविक बीन है जिसे हम कॉन्फ़िगर कर रहे हैं।
package spring;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class Bean1 {
private String naber;
@Autowired
@Qualifier("FireImpl1")
private Fire fire;
@PostConstruct
public void init() {
System.out.println("init");
getFire().fire();
}
@PreDestroy
public void destroy() {
System.out.println("destroy");
}
public void setNaber(String naber) {
this.naber = naber;
}
public String getNaber() {
return naber;
}
public void setFire(Fire fire) {
this.fire = fire;
}
public Fire getFire() {
return fire;
}
}
आग निर्भरता इंटरफ़ेस
package spring;
public interface Fire {
public void fire();
}
और डमी कार्यान्वयन 1
package spring;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
@Qualifier("FireImpl1")
public class FireImpl1 implements Fire {
public void fire() {
System.out.println(getClass());
}
}
और डमी कार्यान्वयन है 2
package spring;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
@Qualifier("FireImpl2")
public class FireImpl2 implements Fire {
public void fire() {
System.out.println(getClass());
}
}
config.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:component-scan base-package="spring" />
<bean id="bean1" class="spring.Bean1">
<property name="naber" value="nice" />
<property name="fire" ref="fireImpl2" />
</bean>
</beans>
और मुख्य वर्ग
package spring;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Spring {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring/config.xml");
applicationContext.registerShutdownHook();
Bean1 bean = (Bean1) applicationContext.getBean("bean1");
System.out.println(bean.getNaber());
}
}
यहां उत्पादन
init
class spring.FireImpl2
nice
destroy
हालांकि एनोटेशन FireImpl1, xml config FireImpl2 साथ overrided को निर्भरता को हल करता है। बहुत अच्छा है।
संबंधित मुद्दे
- 1. वसंत विन्यास
- 2. क्या हम एक और कॉन्फ़िगरेशन में एक xml कॉन्फ़िगरेशन में घोषित वसंत बीन्स को ओवरराइड कर सकते हैं?
- 3. वसंत जावा विन्यास
- 4. WebInvoke सकते हैं गुण बाइंडिंग विन्यास
- 5. वसंत सुरक्षा कॉन्फ़िगरेशन बदलना
- 6. वसंत ढांचे के साथ शुरू करना
- 7. एकाधिक बिल्ड कॉन्फ़िगरेशन एक कॉन्फ़िगरेशन रूपांतरण साझा कर सकते हैं?
- 8. वसंत सुरक्षा बुनियादी विन्यास
- 9. वसंत पार्स और इंजेक्शन गुण फ़ाइलें कर सकते हैं?
- 10. वसंत में बीन कॉन्फ़िगरेशन ओवरराइडिंग
- 11. वसंत ढांचे में कमांड ऑब्जेक्ट
- 12. वसंत जावा कॉन्फ़िगरेशन यूनिट परीक्षण
- 13. तरीके वसंत MVC ढांचे
- 14. ऑब्जेक्ट्स विभिन्न ढांचे संस्करणों में क्रमबद्ध/deserialize कर सकते हैं?
- 15. जटिल कॉन्फ़िगरेशन को संभालने के लिए संभावित हल्के जावा कॉन्फ़िगरेशन लाइब्रेरी क्या हैं?
- 16. वसंत ढांचे के साथ 'नामांकित क्वेरी नहीं मिली'
- 17. मेवेन कॉन्फ़िगरेशन ओवरराइड करने के बजाए बढ़ाना
- 18. वसंत विन्यास में एक्सएमएल-शैली वस्तुओं के लिए वैकल्पिक?
- 19. वसंत @ कॉन्फ़िगरेशन एनोटेशन
- 20. न्यूनतम विन्यास के साथ एकता का उपयोग
- 21. वसंत एकाधिक @ कॉन्फ़िगरेशन कक्षा
- 22. संदर्भ $ {user.home} वसंत जावा विन्यास में
- 23. एप्लिकेशन कॉन्फ़िगरेशन (वसंत?)
- 24. सी # इंटरफ़ेस गुण समान नाम के साथ बेस इंटरफ़ेस गुणों को ओवरराइड कर सकते हैं?
- 25. क्या आप कक्षा के कन्स्ट्रक्टर को ओवरराइड कर सकते हैं और विरासत में उपयोग कर सकते हैं?
- 26. क्या हम संपूर्ण कॉन्फ़िगरेशन फ़ाइल एन्क्रिप्ट कर सकते हैं?
- 27. स्प्रिंग: मैं वसंत विन्यास में Enum कैसे इंजेक्षन करते हैं?
- 28. वसंत बीन्स कॉन्फ़िगरेशन
- 29. एक्सएमएल विन्यास या विन्यास?
- 30. जावा डेस्कटॉप अनुप्रयोगों के लिए वसंत और एसडब्ल्यूटी एक साथ काम कर सकते हैं?
हालांकि, यह इस प्रकार के आधार पर '@ ऑटोवायर' फ़ील्ड के लिए काम नहीं कर सकता है? यह 'org.springframework.beans.factory को फेंकने लगता है। NoSuchBeanDefinitionException: प्रकार का कोई अनोखा बीन [com.xyz.BeanA] परिभाषित नहीं किया गया है: अपेक्षित एकल मिलान बीन लेकिन पाया 2: [बीनए, बीनए]' (वसंत 3.2) – Arjan