Java SpringMVC项目上没有类型为的合格bean

Java SpringMVC项目上没有类型为的合格bean,java,spring-mvc,jpa,Java,Spring Mvc,Jpa,我创建了SpringMVC+jpa项目,当我收到beanmyrepository类时,我得到了一个异常。配置jpa是正确的,但我在类controller的这一部分中得到错误 @Controller public class WebController { private ApplicationContext context; private PupilService pupilService; private PupilRepository pupilRepositor

我创建了SpringMVC+jpa项目,当我收到
bean
my
repository
类时,我得到了一个异常。配置jpa是正确的,但我在类
controller
的这一部分中得到错误

@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
StackTrace

**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> {
}
公共接口PupilRepository扩展了crudepository{
}

请用@Repository注释接口PupilRepository

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

如果您遇到任何问题,请尝试告诉我。

@Repository
注释
PupilRepository
。另外,使用
@Autowired
将bean注入控制器当我使用
@Autowired
时,我得到
警告[RMI TCP连接(2)-127.0.0.1]org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc web应用程序[ROOT]注册了JDBC驱动程序[org.postgresql.driver]但在web应用程序停止时无法注销它。为了防止内存泄漏,JDBC驱动程序已被强制注销。
我被添加了
@Repository
@Autowired
,但我有一个新的异常
警告[RMI-TCP-Connection(2)-127.0.0.1]org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc web应用程序[ROOT]注册了JDBC驱动程序[org.postgresql.Driver]但在web应用程序停止时无法注销。为防止内存泄漏,已强制注销JDBC驱动程序。
@Autowired
private PupilRepository pupilRepository;