Используйте @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 и не отображается на уровне контекста пружины для автоматического подключения.