मैं उस मामले पर ठोकर खाई जहां @Cacheable का उपयोग करके बनाई गई एओपी प्रॉक्सी स्प्रिंग 3.1.1 में निर्भरता इंजेक्शन को तोड़ देती है। यहां मेरा परिदृश्य है:@ कैशेबल ब्रेक निर्भरता इंजेक्शन
मेरे पास एक इंटरफ़ेस और एक क्लास है जिसे कार्यान्वित विधि पर @ कैशेबल का उपयोग करके इस इंटरफेस को कार्यान्वित किया गया है।
उदाहरण इंटरफ़ेस:
public interface ImgService {
public byte[] getImage(String name);
}
उदाहरण कार्यान्वयन:
public class ImgServiceImpl implements ImgService {
@Cacheable(cacheName = "someCache")
public byte[] getImage(String name){//TODO};
protected String someOtherMethod(){//};
}
मैं भी JUnit परीक्षण वर्गों के लिए है - एक जो इंटरफेस और एक कार्यान्वयन injects:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:META-INF/spring.xml" })
public class ImgServiceTest {
@Inject
private ImgService;
}
और
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:META-INF/spring.xml" })
public class ImgServiceImplTest {
@Inject
private ImgServiceImpl;
}
इंटरफ़ेस के लिए निर्भरता इंजेक्शन ठीक काम करता है। हालांकि, जब मैं दूसरे टेस्ट कक्षा में कार्यान्वयन इंजेक्शन लगाने के लिए मिलता है मैं एक "autowired निर्भरता इंजेक्शन विफल" मिलता है। मैं इसे डिबग करने के लिए कर रहा था और ऐसा लगता है कि ClassUtils.isAssignableValue() को गलत तरीके से इच्छित प्रकार प्रॉक्सी वर्ग है। यह DefaultListableBeanFactory द्वारा कहा जाता है। क्या भी अजनबी है कि अगर मैं कार्यान्वित विधि से @Cacheable टिप्पणी निकालने और कुछ अन्य संरक्षित/निजी विधि में जोड़ने, निर्भरता इंजेक्शन फिर से ठीक काम करता है है। यह एक बग है और क्या सही दृष्टिकोण इस स्थिति को संभालने के लिए हो सकता है?
यहाँ एक और है अच्छा संदर्भ - http://blog.springsource.org/2012/05/23/understanding-proxy-usage-in-spring/ –