Java Spring 4 - почему мне нужно вручную сканировать bean-компоненты в WebApplicationInitializer

Я пытаюсь настроить веб-приложение с помощью Spring 4.1 и Wicket 6.18. Я хочу использовать подход полного кода. У меня есть два тестовых класса с аннотациями @Configuration и @Bean. Я хочу, чтобы они обнаруживались, когда я запускаю свое приложение в Tomcat, но оно не работает, если я вручную не просканирую базовый пакет в своем пользовательском WebApplicationInitialzer. Под «вручную» я подразумеваю вызов AnnotationConfigWebApplicationContext.scan().

Я просмотрел довольно много руководств по подходу, основанному на коде, и не видел, чтобы они это делали. Даже в официальной весне документы они этого не делают.

Что я делаю не так, что мне это нужно и как это исправить?

Мой пользовательский WebApplicationInitialzer выглядит так:

public class WebAppInitializer implements WebApplicationInitializer {

    private static final Logger logger = LoggerFactory.getLogger(WebAppInitializer.class);

    @Override
    public void onStartup(ServletContext container) throws ServletException {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        container.addListener(new ContextLoaderListener(context));

        context.scan("pl.myhouse"); //why do i need this???

        FilterRegistration filter = container.addFilter("wicket.myproject", WicketFilter.class);
        filter.setInitParameter("applicationClassName", WicketApplication.class.getName());
        filter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*");
        filter.addMappingForUrlPatterns(null, false, "/*");
    }

}

person Robert Niestroj    schedule 13.11.2014    source источник
comment
Вы пропустили строку в руководстве: rootContext.register(AppConfig.class);   -  person The Head Rush    schedule 14.11.2014
comment
Вы использовали @ComponentScan, чтобы фактически получать аннотации и все это автоматически при запуске?   -  person Aeseir    schedule 14.11.2014
comment
Оба ваших комментария верны: у меня не было @ComponentScan, поэтому мне пришлось сканировать вручную. Я добавил context.register() и @ComponentScan и удалил context.scan(), и это работает :)   -  person Robert Niestroj    schedule 14.11.2014


Ответы (1)


Вы оба @The Head Rush и @Aeseir правы. Мне не хватало rootContext.register(Appconfig.class), а также @ComponentScan. Я даже мог бы поделиться своими знаниями дальше: Настройка Spring Wicket с использованием Java Conf вместо xml :)

person Robert Niestroj    schedule 19.11.2014