Используйте @Autowired в Spring MVC и JavaConfig

У меня есть весенний проект MVC, и я не использую @Autowired потому что мой объект всегда null, Как мне загрузить JavaConfig для использования @AutowiredЯ не использую любой *.xml файл.

Это мой контроллер с @Autowired поле для обслуживания.

@Controller
public class WebController {
    @Autowired
    private ServiceWeb serviceWeb;

    public void setServiceWeb(ServiceWeb serviceWeb) {
        this.serviceWeb = serviceWeb;
    }
    ...
}

Это мой AbstractAnnotationConfigDispatcherServletInitializer

public class ServletInit extends
        AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { SpringRootConfig.class};
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { SpringWebConfig.class};
    }
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

SpringRootConfig & SpringWebConfig

@Configuration
@ComponentScan({"web.controller"})
public class SpringRootConfig {
}

@EnableWebMvc
@Configuration
@ComponentScan({ "web.controller"})
@Import({SecurityConfig.class})
public class SpringWebConfig extends WebMvcConfigurerAdapter{
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/resources/");
    }
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver
                = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

Класс для @Autowiring

@Configuration
public class ConfigurationBean {
    @Bean
    public ServiceWeb serviceWeb(){
        return new ServiceWebImpl();
    }
}

Зарегистрируйте контекст для весны, но где нужно написать Init.class для загрузки этого конфига?

public class Init implements WebApplicationInitializer {
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(ConfigurationBean.class);
        servletContext.addListener(new ContextLoaderListener(ctx));
        ctx.setServletContext(servletContext);
    }
}

1 ответ

Пожалуйста, попробуйте это...

@Service
public class ServiceWebImpl implements ServiceWeb {

}

Компонент ServiceWeb создается внутри класса ConfigurationBean и не отображается на уровне контекста пружины для автоматического подключения.

Другие вопросы по тегам