2017-03-16 52 views
1

這是我第一次嘗試爲Spring數據JPA與Spring MVC和我沒有能夠解決這個錯誤。型沒有合格豆「com.example.repo.UserRepository」可用

錯誤日誌

嚴重:異常發送上下文初始化事件監聽器類org.springframework.web.context.ContextLoaderListener的實例 org.springframework.beans.factory.UnsatisfiedDependencyException:錯誤創建與豆名稱'mainController':通過字段'userRepository'表示的不滿足的依賴關係;嵌套的例外是org.springframework.beans.factory.NoSuchBeanDefinitionException:類型com.example.repo.UserRepository「提供的沒有合格豆:預計將有至少1 Bean上有資格作爲自動裝配候選人。依賴註解:{@ org.springframework.beans.factory.annotation.Autowired(必需=真)} 在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) 的組織。 springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) 在org.springframework.beans.factory。 support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) at org.sp ringframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 在org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306) 在org.springframework.beans.factory .support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(Ab stractApplicationContext.java:866) 在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 在org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) 在有機springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) at org.apache.catalina.core.StandardContext.listenerStart( (org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org。)。 apache.catalina.core .ContainerBase $ StartChild.call(ContainerBase.java:1419) at org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1409) at java.util.concurrent.FutureTask.run(FutureTask.java :266) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run (Thread.java:745) 所致:org.springframework.beans.factory.NoSuchBeanDefinitionException:類型com.example.repo的」不符合條件的豆。UserRepository'可用:預計至少有1個bean有資格作爲autowire候選者。依賴註解:{@ org.springframework.beans.factory.annotation.Autowired(所需=真)} 在org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486) 在org.springframework。在org.springframework.beans.factory.annotation上的beans.factory.support.DefaultListableBeanFactory.doResolveDependency AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ...... 24多個

UserRepository.java

@Repository 
public interface UserRepository extends CrudRepository<User, Integer> { 

} 

MainController.java

@Controller 
@RequestMapping("/") 
public class MainController { 

    @Autowired 
    private UserRepository userRepository; 

    @RequestMapping(value = "/user", method = RequestMethod.POST, headers = "Accept=application/json") 
    @ResponseBody 
    public ResponseEntity<User> addUser(@RequestBody User user) { 
     userRepository.save(user); 
     System.out.println("------>>>>>>>>>>" + user.getName()); 
     HttpHeaders headers = new HttpHeaders(); 
     return new ResponseEntity<User>(headers, HttpStatus.OK); 
    } 

    @RequestMapping(value = "/user/list", method = RequestMethod.GET) 
    public ResponseEntity<List<User>> listAllUsers() { 
     List<User> users = (List<User>)userRepository.findAll(); 
     if (users.isEmpty()) { 
      System.out.println("List is empty oops..!!"); 
      return new ResponseEntity<List<User>>(HttpStatus.NO_CONTENT); 
     } 
     System.out.println("Got the List...!!"); 
     System.out.println("Name of First User---->>>>" + users.get(0).getName()); 
     return new ResponseEntity<List<User>>(users, HttpStatus.OK); 
    } 

} 

AppConfig.java

@Configuration 
@ComponentScan("com.example") 
@EnableWebMvc 
@EnableJpaRepositories 
@EnableTransactionManagement 
public class AppConfig { 

    @Bean 
    public InternalResourceViewResolver viewResolver(){ 
     InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF"); 
     resolver.setSuffix(".html"); 
     return resolver; 
    } 

    @Bean 
    public DataSource dataSource(){ 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     dataSource.setUrl("jdbc:mysql://localhost:3306/spring_database"); 
     dataSource.setUsername("root"); 
     dataSource.setPassword(""); 
     return dataSource; 
    } 

    @Bean 
    public EntityManagerFactory entityManagerFactory(){ 
     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setShowSql(true); 
     LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); 
     factory.setJpaVendorAdapter(vendorAdapter); 
     factory.setPackagesToScan(User.class.getPackage().getName()); 
     factory.setDataSource(dataSource()); 
     factory.afterPropertiesSet(); 
     return factory.getObject(); 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager(){ 
     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(entityManagerFactory()); 
     return txManager; 
    } 

} 

User.java

@Entity 
@Table(name="user") 
public class User { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer id; 
    private String name; 
    private String email; 
    /*Getters and Setters*/ 

這是我的項目結構

Project Structure

我失去的是什麼?或者我在這裏犯了什麼錯誤?有誰能解決這個問題嗎

+1

你需要告訴我們每一個這些類的包。 –

+1

'@ComponentScan(「com.exampl」)'E缺失 – 2017-03-16 07:53:44

+0

@JBNizet我附上了我的項目結構圖片 – Dishank

回答

0

你需要告訴春天在哪裏找庫:

@EnableJpaRepositories(basePackageClasses = UserRepository.class)

+0

這仍然得到相同的錯誤。 – Dishank

+0

我和Dishank有同樣的問題。試過這個,但沒有改變任何東西。 – Cristian

相關問題