我的Spring MVC Web应用程序中有这个控制器,
@Controller
@RequestMapping("/spittles")
public class SpittleController {
private SpittleRepository spittleRepository;
@Autowired
public SpittleController(SpittleRepository spittleRepository) {
this.spittleRepository = spittleRepository;
}
public String spittles(Model model) {
model.addAttribute(spittleRepository.findSpittles(Long.MAX_VALUE, 20));
return "spittles";
}
}
SpittleRepository是一个接口:
public interface SpittleRepository {
List<Spittle> findSpittles(long max, int count);
}
SpittleRepository的实现如下:
@Component
public class SpittleRepositoryImpl
implements SpittleRepository {
@Override
public List<Spittle> findSpittles(long max, int count) {
List<Spittle> spittles = new ArrayList<Spittle>();
for (int i = 0; i < count; i++) {
spittles.add(new Spittle("Spittle" + i, new Date()));
}
return spittles;
}
}
即使我已经自动装配,但我得到了:
org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为&#39; spittleController&#39;的bean时出错在文件中定义 [C:\ java的\工作空间\ default.metadata.plugins \ org.eclipse.wst.server.core \ TMP0 \ wtpwebapps \第五章-BuildingSpringWebApplications \ WEB-INF \类\有机\ spittr \网络\ SpittleController.class]: 通过构造函数参数表示不满意的依赖关系 类型为[org.spittr.data.SpittleRepository]的索引0 ::没有限定条件 找到依赖的[org.spittr.data.SpittleRepository]类型的bean: 预计至少有1个豆有资格成为autowire候选人 这种依赖。依赖注释:{};嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 找到类型[org.spittr.data.SpittleRepository]的限定bean 依赖:预计至少有1个bean有资格成为autowire 这种依赖的候选人。依赖注释:{}
java配置文件是:
@Configuration
@EnableWebMvc // Enable Spring MVC
@ComponentScan(basePackages={"org.spittr"})
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver =
new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer
configurer) {
/* configure static content handling */
configurer.enable();
}
}
和项目结构可以在这里看到:
RootConfig:
@ComponentScan(basePackages = { "org.spittr" },
excludeFilters = { @Filter(type = FilterType.ANNOTATION,
value = EnableWebMvc.class) })
public class RootConfig {
}
SpittrWebAppInitializer.java :
public class SpittrWebAppInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { RootConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
// Specify configuration class
return new Class<?>[] { WebConfig.class };
}
@Override
protected String[] getServletMappings() {
// Map DispatcherServlet to /
return new String[] { "/" };
}
}
答案 0 :(得分:0)
我认为问题在于要扫描的包 - 它没有正确定义,请尝试chaning to:
main.java.org.spittr
或者使用以下方法 - 我认为它更不容易出错。
basePackageClasses = {Spittle.class}
此致 米哈尔
答案 1 :(得分:0)
说实话,我不知道为什么 清理和构建 解决了这个问题。