由Spring实现的我的Web应用程序只能在控制器中使用@autowire bean,而不能使用服务。我从Spring文档(第4.9节)中找到以下描述,但它没有给出答案。
仅查找在定义它的同一应用程序上下文中的bean上的注释。这意味着,如果您为DispatcherServlet放入WebApplicationContext,它只检查控制器中的@Autowired bean,而不检查您的服务。有关更多信息,请参见第16.2节“DispatcherServlet”。
在第16.2节中,既没有解释也没有。谁能帮我?我的代码如下所示。
在配置包中,有3个类
public class Webapp extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{PersistConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{ WebMvcConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[]{ "/" };
}
}
@Configuration
public class PersistConfig {
@Bean
public JdbcTemplate jdbcTemplateRepository() {
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
dataSource.setDriverClass(com.mysql.jdbc.Driver.class);
dataSource.setUrl("jdbc:mysql://localhost:3306/categorybags_db");
dataSource.setUsername("root");
dataSource.setPassword("");
return new JdbcTemplate(dataSource);
}
}
@ComponentScan({"web.controller", "persistence.services"})
@EnableWebMvc
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/res/**").addResourceLocations("/res/");
}
@Bean
public ViewResolver viewResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setCacheable(false);
templateResolver.setPrefix("/WEB-INF/jsp/");
templateResolver.setSuffix(".jsp");
templateResolver.setTemplateMode("HTML5");
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setOrder(1);
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
}
在包persistence.services中,只有我想要自动装入JdbcTemplate的类DBServices获取null,但是在控制器jdbcTemplate中使用相同的语句不是null。
@Repository
@Configurable
public class DBServices {
@Autowired JdbcTemplate jdbcTemplate;
//some code here
}
答案 0 :(得分:0)
可能问题出在您的配置中。
检查您的bean定义文件并搜索<context:component-scan base-package="your.package" />
标记。
您需要指定放置某种@Component
,@Controller
@Service
或@Repository
的所有套餐。