Spring UnsatifiedPendencyException:创建名为的bean时出错

Spring UnsatifiedPendencyException:创建名为的bean时出错,spring,spring-mvc,Spring,Spring Mvc,我正在尝试在Spring上创建db服务器,并研究了许多类似的问题,但没有人能帮到我。我无法解决此错误: org.springframework.beans.factory.unsatifiedpendencyException:创建名为“groupController”的bean时出错:通过字段“gs”表示未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatifiedpendencyException:创建名为“groupServiceImp

我正在尝试在Spring上创建db服务器,并研究了许多类似的问题,但没有人能帮到我。我无法解决此错误:

org.springframework.beans.factory.unsatifiedpendencyException:创建名为“groupController”的bean时出错:通过字段“gs”表示未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatifiedpendencyException:创建名为“groupServiceImpl”的bean时出错:未满足的依赖项通过字段“gr”表示;嵌套异常为org.springframework.beans.factory.beancreatitionException:创建名为“groupRepository”的bean时出错:在设置bean属性“entityManager”时,无法创建[org.springframework.orm.jpa.SharedEntityManagerCreator]类型的内部bean(内部bean)#1a3c15e0;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“(内部bean)#1a3c15e0”的bean时出错:设置构造函数参数时无法解析对bean“entityManagerFactory”的引用;嵌套异常为org.springframework.beans.factory.NoSuchBean定义异常:没有名为“entityManagerFactory”的bean可用

以下是我的课程:

GroupController.java

 @RestController
public class GroupController {

    @Autowired
    private GroupService gs;


    @RequestMapping(value = "/groups", method = RequestMethod.GET)
    @ResponseBody
    public List<Group> getAllGroups(){
       // return mocklist();
        return gs.getAll();
    }

    private List<Group> mocklist() {
        Group g= new Group();
        g.setId(1);
        g.setGroupName("333");
        g.setTutorName("shcefsa");
        List<Group> list = new ArrayList<Group>();
        list.add(g);
        g.setId(2);
        g.setGroupName("333");
        g.setTutorName("shc321efsa");
        list.add(g);
        return list;
    }


    @RequestMapping(value = "/groups/{id}", method = RequestMethod.GET)
    @ResponseBody
    public Group getGroupById(@PathVariable("id") int groupId){
        return gs.getById(groupId);
    }


    @RequestMapping(value = "/groups", method = RequestMethod.POST)
    @ResponseBody
    public Group addGroup(@RequestBody Group group){
        return gs.add(group);
    }


    @RequestMapping(value = "/groups", method = RequestMethod.POST)
    @ResponseBody
    public Group updateGroup(@RequestBody Group group){
        return gs.add(group);
    }

    @RequestMapping(value = "/groups/{id}", method = RequestMethod.POST)
    @ResponseBody
    public void deleteGroup(@PathVariable("id") int groupId){
        gs.deleteById(groupId);
    }


}
@Repository
public interface GroupRepository extends JpaRepository<Group, Integer> {


}
@Service
public interface GroupService {

    List<Group> getAll();
    Group getById(int id);
    Group add(Group group);
    void deleteById(int id);

}
    @Configuration
@EnableJpaRepositories("com.homestudio.tutor.server.repository")
@EnableTransactionManagement
@PropertySource("classpath:db.properties")
@ComponentScan("com.homestudio.tutor.server")
public class DatabaseConfig {


    @Resource
    private Environment env;

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan(env.getRequiredProperty("db.entity.package"));
        em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        em.setJpaProperties(getHibernateProperties());

        return em;
    }



    @Bean
    public PlatformTransactionManager platformTransactionManager(){
        JpaTransactionManager manager = new JpaTransactionManager();
        manager.setEntityManagerFactory(entityManagerFactoryBean().getObject());

        return manager;

    }


    @Bean
    public DataSource dataSource(){
        BasicDataSource ds = new BasicDataSource();
        ds.setUrl(env.getRequiredProperty("db.url"));
        ds.setDriverClassName(env.getRequiredProperty("db.driver"));
        ds.setUsername(env.getRequiredProperty("db.username"));
        ds.setPassword(env.getRequiredProperty("db.password"));

        ds.setInitialSize(Integer.valueOf(env.getRequiredProperty("db.initialSize")));
        ds.setMinIdle(Integer.valueOf(env.getRequiredProperty("db.minIdle")));
        ds.setMaxIdle(Integer.valueOf(env.getRequiredProperty("db.maxIdle")));
        ds.setTimeBetweenEvictionRunsMillis(Long.valueOf(env.getRequiredProperty("db.timeBetweenEvictionRunsMilles")));
        ds.setMinEvictableIdleTimeMillis(Long.valueOf(env.getRequiredProperty("db.minEvictableIdleTimeMilles")));
        ds.setTestOnBorrow(Boolean.valueOf(env.getRequiredProperty("db.testOnBorrow")));
        ds.setValidationQuery(env.getRequiredProperty("db.validationQuery"));

        return ds;

    }

    public Properties getHibernateProperties() {

        try {
        Properties properties = new Properties();
        InputStream is = getClass().getClassLoader().getResourceAsStream("hibernate.properties");

        properties.load(is);

            return properties;
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot find file \"hibernate.properties\" in classpath");
        }



    }
}
@Configuration
@EnableWebMvc
@ComponentScan("com.homestudio.tutor.server")
public class WebConfig extends WebMvcConfigurerAdapter{

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(new ObjectMapper());
        converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));


        converters.add(converter);

    }
}
WebConfig.java

 @RestController
public class GroupController {

    @Autowired
    private GroupService gs;


    @RequestMapping(value = "/groups", method = RequestMethod.GET)
    @ResponseBody
    public List<Group> getAllGroups(){
       // return mocklist();
        return gs.getAll();
    }

    private List<Group> mocklist() {
        Group g= new Group();
        g.setId(1);
        g.setGroupName("333");
        g.setTutorName("shcefsa");
        List<Group> list = new ArrayList<Group>();
        list.add(g);
        g.setId(2);
        g.setGroupName("333");
        g.setTutorName("shc321efsa");
        list.add(g);
        return list;
    }


    @RequestMapping(value = "/groups/{id}", method = RequestMethod.GET)
    @ResponseBody
    public Group getGroupById(@PathVariable("id") int groupId){
        return gs.getById(groupId);
    }


    @RequestMapping(value = "/groups", method = RequestMethod.POST)
    @ResponseBody
    public Group addGroup(@RequestBody Group group){
        return gs.add(group);
    }


    @RequestMapping(value = "/groups", method = RequestMethod.POST)
    @ResponseBody
    public Group updateGroup(@RequestBody Group group){
        return gs.add(group);
    }

    @RequestMapping(value = "/groups/{id}", method = RequestMethod.POST)
    @ResponseBody
    public void deleteGroup(@PathVariable("id") int groupId){
        gs.deleteById(groupId);
    }


}
@Repository
public interface GroupRepository extends JpaRepository<Group, Integer> {


}
@Service
public interface GroupService {

    List<Group> getAll();
    Group getById(int id);
    Group add(Group group);
    void deleteById(int id);

}
    @Configuration
@EnableJpaRepositories("com.homestudio.tutor.server.repository")
@EnableTransactionManagement
@PropertySource("classpath:db.properties")
@ComponentScan("com.homestudio.tutor.server")
public class DatabaseConfig {


    @Resource
    private Environment env;

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan(env.getRequiredProperty("db.entity.package"));
        em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
        em.setJpaProperties(getHibernateProperties());

        return em;
    }



    @Bean
    public PlatformTransactionManager platformTransactionManager(){
        JpaTransactionManager manager = new JpaTransactionManager();
        manager.setEntityManagerFactory(entityManagerFactoryBean().getObject());

        return manager;

    }


    @Bean
    public DataSource dataSource(){
        BasicDataSource ds = new BasicDataSource();
        ds.setUrl(env.getRequiredProperty("db.url"));
        ds.setDriverClassName(env.getRequiredProperty("db.driver"));
        ds.setUsername(env.getRequiredProperty("db.username"));
        ds.setPassword(env.getRequiredProperty("db.password"));

        ds.setInitialSize(Integer.valueOf(env.getRequiredProperty("db.initialSize")));
        ds.setMinIdle(Integer.valueOf(env.getRequiredProperty("db.minIdle")));
        ds.setMaxIdle(Integer.valueOf(env.getRequiredProperty("db.maxIdle")));
        ds.setTimeBetweenEvictionRunsMillis(Long.valueOf(env.getRequiredProperty("db.timeBetweenEvictionRunsMilles")));
        ds.setMinEvictableIdleTimeMillis(Long.valueOf(env.getRequiredProperty("db.minEvictableIdleTimeMilles")));
        ds.setTestOnBorrow(Boolean.valueOf(env.getRequiredProperty("db.testOnBorrow")));
        ds.setValidationQuery(env.getRequiredProperty("db.validationQuery"));

        return ds;

    }

    public Properties getHibernateProperties() {

        try {
        Properties properties = new Properties();
        InputStream is = getClass().getClassLoader().getResourceAsStream("hibernate.properties");

        properties.load(is);

            return properties;
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot find file \"hibernate.properties\" in classpath");
        }



    }
}
@Configuration
@EnableWebMvc
@ComponentScan("com.homestudio.tutor.server")
public class WebConfig extends WebMvcConfigurerAdapter{

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(new ObjectMapper());
        converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));


        converters.add(converter);

    }
}
@配置
@EnableWebMvc
@组件扫描(“com.homestudio.tutor.server”)
公共类WebConfig扩展了WebMVCConfigureAdapter{
@凌驾

public void configureMessageConverters(列表我想这里的主要部分是“NoSuchBeanDefinitionException:没有名为'entityManagerFactory'的bean可用”。看起来您的GroupRepository需要初始化一些spring数据jpa。您能提供您的spring上下文定义吗?@Normal这对我来说是新概念,我不完全理解。它是关于ServletContext的?不,我指的是主spring框架配置。通常是“@configuration”或“@SpringBootApplication”注释类或者spring xml文件。@Normal我添加了这个类。我根据您的来源创建了一个示例项目,问题在方法重命名后消失了。您是否有机会创建一个模拟项目,重现这个问题并共享它(例如通过github)?我想这里的主要部分是NoSuchBeanDefinitionException:没有名为“entityManagerFactory”的bean可用"。看起来您的GroupRepository需要初始化一些spring数据jpa。您能提供您的spring上下文定义吗?@Normal这对我来说是新概念,我不完全理解。它是关于ServletContext的?不,我指的是主spring框架配置。通常是“@configuration”或“@SpringBootApplication”注释类或spring xml文件。@Normal我添加了这个类。我根据您的来源创建了一个示例项目,问题在方法重命名后就消失了。您是否有机会创建一个模拟项目来重现这个问题并共享它(例如通过github)?