Cześć,
dostaję taki błąd z nieznanych mi przyczyn.
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'spittleController' defined in file [C:\Users\Bartek\IdeaProjects\demo5\out\artifacts\demo5\exploded\ROOT.war\WEB-INF\classes\pl\slovvik\controller\SpittleController.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type [pl.slovvik.repository.SpittleRepository] found for dependency [pl.slovvik.repository.SpittleRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [pl.slovvik.repository.SpittleRepository] found for dependency [pl.slovvik.repository.SpittleRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
Tymczasem wszystkie adnotacje i definicje są, moim zdaniem poprawne.
@Configuration
@EnableWebMvc
@ComponentScan(basePackageClasses = Spittle.class)
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public InternalResourceViewResolver resolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
@Controller
@RequestMapping("/spittles")
public class SpittleController {
private SpittleRepository spittleRepository;
@Autowired
public SpittleController(SpittleRepository spittleRepository) {
this.spittleRepository = spittleRepository;
}
@RequestMapping(method = RequestMethod.GET)
public String spittles(Model model){
model.addAttribute(spittleRepository.findSpittles(Long.MAX_VALUE, 20));
return "spittles";
}
}
public interface SpittleRepository {
List<Spittle> findSpittles(long max, int count);
}
Dodatkowo test przechodzi pozytywnie.
@Test
public void shouldShowRecentSpittles() throws Exception{
List<Spittle> expectedSpittles = createSpittleList(20);
SpittleRepository mockRepository = mock(SpittleRepository.class);
when(mockRepository.findSpittles(Long.MAX_VALUE,20)).thenReturn(expectedSpittles);
SpittleController spittleController = new SpittleController(mockRepository);
MockMvc mockMvc = standaloneSetup(spittleController).setSingleView(new InternalResourceView("/spittles.jsp")).build();
mockMvc.perform(get("/spittles"))
.andExpect(view().name("spittles"))
.andExpect(model().attributeExists("spittleList"))
.andExpect(model().attribute("spittleList", hasItems(expectedSpittles.toArray())));
}