سؤال

قضيت بعض الوقت في حل مشكلة المفقودين org.joda.time.DateTime->java.util.Date محول في الربيع البيانات (والتي يجب أن يتم تمكين افتراضيا عندما Joda الوقت على classpath).لقد وجدت السبب ، ولكنها ولدت سؤال حول @Configuration الشرح في الربيع.

تطبيق معيار التكوين باستخدام AbstractMongoConfiguration من الربيع-البيانات-mongodb:

@Configuration
@ComponentScan
@EnableMongoRepositories
public class AppConfig extends AbstractMongoConfiguration { ... }

الاختبار الذي صريحة يستخدم AppConfig فئة (مع سبوك, ولكن داخليا الآليات المنصوص عليها الربيع-اختبار تستخدم):

@ContextConfiguration(classes = AppConfig)
class JodaDocRepositorySpec extends Specification {

    @Autowired
    private JodaDocRepository jodaDocRepository

    def "save document with DateTime"() {
        given:
            def jodaDoc = new JodaDoc(DateTime.now())
        when:
            def savedJodaDoc = jodaDocRepository.save(jodaDoc)
        then:
            savedJodaDoc.id
    }
}

أنه يعمل بشكل جيد.ولكن عندما @التكوين الشرح في AppConfig هو إزالة/علق:

//@Configuration
@ComponentScan
@EnableMongoRepositories
public class AppConfig extends AbstractMongoConfiguration { ... }

فشل الاختبار مع:

org.springframework.core.convert.ConverterNotFoundException:
No converter found capable of converting from type org.joda.time.DateTime to type java.util.Date

AFAIK أنه ليست هناك حاجة لاستخدام @Configuration لتكوين الطبقة عندما الصريحة المسجلة في سياق (من قبل الطبقات في @ContextConfiguration أو register() طريقة AnnotationConfigWebApplicationContext).الطبقات يتم معالجتها على أي حال وكل أعلن الفول وجدت.فمن المفيد أحيانا إلى عدم استخدام @Configuration لمنع كشف من قبل مكون المسح الضوئي عندما يكون هناك 2 مماثل تكوين الطبقات في نفس الحزم في سياق اختبار المستخدمة من قبل مختلف الاختبارات.

لذلك أعتقد أنه يمكن أن الخلل في الربيع الذي يسبب مختلفة الداخلية تجهيز الفول في سياق اعتمادا على الاستخدام أو لا @Configuration الشرح.قارنت الربيع سجلات هذه الحالات هناك بعض الاختلافات, ولكن أنا لست قادرا على تحديد ما هي تسببوا في الربيع الطبقات الداخلية.قبل أن علة تقديم أود أن أسأل:

سؤالي. هل هناك تفسير السبب في الربيع لنفس فئة التكوين (أشار صراحة في @ContextConfiguration) يستخدم (أو لا) محولات Joda الوقت اعتمادا على وجود @Configuration الشرح?

أنا خلقت أيضا التشغيل السريع المشروع استنساخ هذه المسألة.الربيع-البيانات-mongodb 1.3.3, الربيع 4.0.0, joda الوقت 2.3.

هل كانت مفيدة؟

المحلول

انها كل شيء على ما يرام في هذا السلوك. AbstractMongoConfiguration هو مشروح من قبل @Configuration, ولكن في الواقع هذا الشرح ليس @Inherited, لذا عليك صراحة تعليم الفئة الخاصة بك.

عند إزالة @Configuration الشرح ثم AppConfig فئة ليست كامل التكوين.انها عمليات مثل لايت التكوين فقط لأنه يحتوي على أساليب المحشى @Bean - يرجى الرجوع إلى أساليب في org.springframework.context.annotation.ConfigurationClassUtils

  • isFullConfigurationCandidate()
  • isLiteConfigurationCandidate()
  • isFullConfigurationClass()

أخيرا فقط كامل (المحشى @Configuration) تكوين الطبقات العمليات وتعزيز التكوين ما بعد المعالجات أنظر ConfigurationClassPostProcessor.enhanceConfigurationClasses()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top