2017-02-16 6 views
2

У меня есть 3 пружинных загрузки стартер проектов@AutoConfigureAfter не работает по желанию

Один из класса автоконфигуратора имеет следующий код:

@Configuration 
@ConditionalOnClass(value = Config.class) 
@AutoConfigureAfter(value = {FileGeneratorConfig.class, FileUploaderConfig.class}) 
public class JobConfig 

FileGeneratorConfig и FileUploaderConfig также классы автоконфигурации.

Я ожидал, что bean, созданные в FileUploaderConfig, будут созданы в первую очередь. Поэтому проверьте это, я поставил точку останова в методе, который создает bean-компонент в JobConfig и FileUploaderConfig. Но точка прерывания сначала попадает в JobConfig, что заставляет меня поверить, что мой @AutoConfigureAfter не работает. Это правильное предположение.

Также в FileUploaderConfig у меня есть это:

@Bean 
    FileUtilContainer fileUtilContainer(FileUtilContainerProperties fileUtilContainerProperties){ 
     return new FileUtilContainer(FileUtil.createDirectory(fileUtilContainerProperties.getArchive()), 
            FileUtil.createDirectory(fileUtilContainerProperties.getWorking()), 
            FileUtil.createDirectory(fileUtilContainerProperties.getConfirmation()), 
            FileUtil.createDirectory(fileUtilContainerProperties.getConfirmationProcessed()), 
            FileUtil.createDirectory(fileUtilContainerProperties.getError()), 
            FileUtil.createDirectory(fileUtilContainerProperties.getErrorProcessed())); 
    } 

и FileUtilContainerProperties:

@Component 
@ConfigurationProperties(prefix = "batch.letter.directory", ignoreUnknownFields = false) 
public class FileUtilContainerProperties 

но не создавая FileUtilContainerProperties боб. Я что-то упустил?

ответ

2

AutoConfigureAfter контролирует порядок обработки файлов конфигурации и определения их компонентов. Порядок, в котором бобы создаются из этих определений, является отдельной проблемой и зависит, помимо прочего, от зависимостей, существующих между вашими бобами.

+0

спасибо, что имеет смысл. Что касается второй части, где @Component не работает. FileUtilContainerProperties не был добавлен в контекст? –

+0

Я бы предположил, что это пакет, который не является частью сканирования. Лучше избегать использования сканирования компонентов в вашей автоконфигурации. Вместо этого я буду использовать '@EnableConfigurationProperties (FileUtilContainerProperties.class)' on'FileUploaderConfig'. –

+0

Спасибо Энди, я использовал это, и он отлично работает. Итак, я полагаю, что при использовании AutoConfiguration вы должны избегать сканирования компонентов и использовать @EnableConfigurationProperties правильно? –