2015-09-05 53 views
0

我創建spring mvc + jpa項目,我收到一個異常,當我收到bean我的repository類。配置jpa是正確的,但是我在類controller的這一部分出現錯誤。沒有彈簧mvc項目類型的資格bean

@Controller 
public class WebController { 

    private ApplicationContext context; 
    private PupilService pupilService; 
    private PupilRepository pupilRepository; 

    private void setUpField(){ 
     if (context == null){ 
      context = new AnnotationConfigApplicationContext(BeanClass.class); 
     } 
     if (pupilService == null){ 
      pupilService = context.getBean(PupilServiceImpl.class); 
     } 
     System.out.println("1"); //print 
     if (pupilRepository == null){ 
      System.out.println("2"); //print 
      pupilRepository = context.getBean(PupilRepository.class); 
      System.out.println("3"); // no 
     } 
    } 

異常

HTTP Status 500 - Request processing failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.ua.korbo.persistence.repository.PupilRepository] is defined 

堆棧跟蹤

**exception** 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.ua.korbo.persistence.repository.PupilRepository] is defined 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:979) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

**root cause** 

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.ua.korbo.persistence.repository.PupilRepository] is defined 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:371) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:331) 
    org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:968) 
    com.ua.korbo.web.controller.WebController.setUpField(WebController.java:36) 
    com.ua.korbo.web.controller.WebController.printService(WebController.java:55) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:497) 
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

PersistenceContext

@Configuration 
@EnableJpaRepositories(basePackages = {"persistence.repository"}, 
     entityManagerFactoryRef = "entityManagerFactory", 
     transactionManagerRef = "transactionManager") 
@EnableTransactionManagement 
@PropertySource("classpath:app.properties") 
public class PersistenceContext { 

    public PersistenceContext() { 
    } 

    /** 
    * The method that configures the datasource bean 
    * */ 

    @Resource 
    private Environment env; 

    @Bean(destroyMethod = "close") 
    DataSource dataSource() { 
     HikariConfig dataSourceConfig = new HikariConfig(); 
     dataSourceConfig.setJdbcUrl(env.getRequiredProperty("db.url")); 
     dataSourceConfig.setDriverClassName(env.getRequiredProperty("db.driver")); 
     dataSourceConfig.setUsername(env.getRequiredProperty("db.username")); 
     dataSourceConfig.setPassword(env.getRequiredProperty("db.password")); 
     return new HikariDataSource(dataSourceConfig); 
    } 

    /** 
    * The method that configures the entity manager factory 
    * */ 
    @Bean 
    LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, Environment env) { 
     LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); 
     entityManagerFactoryBean.setDataSource(dataSource); 
     entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); 
     entityManagerFactoryBean.setPackagesToScan("entity"); 

     Properties jpaProperties = new Properties(); 

     jpaProperties.put("hibernate.dialect", env.getRequiredProperty("hibernate.dialect")); 
     jpaProperties.put("hibernate.hbm2ddl.auto", env.getRequiredProperty("hibernate.hbm2ddl.auto")); 
     jpaProperties.put("hibernate.show_sql", env.getRequiredProperty("hibernate.show_sql")); 
     jpaProperties.put("hibernate.format_sql", env.getRequiredProperty("hibernate.format_sql")); 

     entityManagerFactoryBean.setJpaProperties(jpaProperties); 

     return entityManagerFactoryBean; 
    } 

    /** 
    * The method that configures the transaction manager 
    * */ 
    @Bean 
    JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(entityManagerFactory); 
     return transactionManager; 
    } 
} 

BeanClass

@Configuration 
@Import({PersistenceContext.class}) 
public class BeanClass { 

    @Bean 
    public PupilService serviceDao(){ 
     return new PupilServiceImpl(); 
    } 

} 

PupilRepository

public interface PupilRepository extends CrudRepository<Pupil, Long> { 
} 
+2

用'@ Repository'註釋標註'PupilRepository'。另外,使用'@ Autowired'將bean注入控制器 –

+0

當我使用'@ Autowired'時,我得到'WARNING [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web應用程序[ROOT]註冊了JDBC驅動程序[org.postgresql.Driver],但在Web應用程序停止時無法取消註冊。爲了防止內存泄漏,已經強制註銷了JDBC驅動程序。' –

回答

0

請標註與@Repository接口PupilRepository。

@Repository 
public interface PupilRepository extends CrudRepository<Pupil, Long> { 
} 

而要在控制器中訪問相同的設備,您需要Autowire它。類似於

@Autowired 
private PupilRepository pupilRepository; 

試着讓我知道,如果你面臨任何問題。

+0

我添加了@ @ Repository和'Autowired',但是我有一個新的異常'WARNING [RMI TCP Connection(2)-127.0.0.1] org .apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web應用程序[ROOT]註冊了JDBC驅動程序[org.postgresql.Driver],但在Web應用程序停止時無法取消註冊。爲了防止內存泄漏,JDBC驅動程序已被強制註銷 –

相關問題