[英]Spring JPA Data Repository failed to create bean for interface that extends CrudRepository
我在使用Spring JPA存储库时遇到问题。 我创造了:
@Entity
), UserDao
延伸CrudRepository
当我运行项目时,由于UserDao
的bean创建异常而UserDao
。 据我所知,Spring JPA存储库负责为此接口创建bean(因为它扩展了CrudRepository
)并将其注入到需要的任何地方。
这是我得到的错误:
警告:org.springframework.web.context.support.AnnotationConfigWebApplicationContext - 在上下文初始化期间遇到异常 - 取消刷新尝试org.springframework.beans.factory.BeanCreationException:创建名为'UserController'的bean时出错:注入自动连接的依赖项失败; 嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private edu.sjsu.services.UserService edu.sjsu.controllers.UserController.userService; 嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'userServiceImpl'的bean时出错:注入自动连接的依赖项失败; 嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:edu.sjsu.models.UserDao edu.sjsu.services.UserServiceImpl.userDao; 嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到[edu.sjsu.models.UserDao]类型的限定bean:期望至少有一个bean符合此依赖关系的autowire候选资格。 依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}在org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
UserDao.Java:
package edu.sjsu.models;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;
public interface UserDao extends CrudRepository<User, Long> {}
RootConfig.Java:
@Configuration
@ComponentScan(basePackages={"edu.sjsu"}, excludeFilters={@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)})
@Import(JpaConfig.class)
public class RootConfig {}
JpaConfig.java
我想如果使用Spring JPA我甚至不需要这个,但我仍然按照指南和教程创建了这个配置类。
@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
public class JpaConfig {
@Bean
public DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.HSQL).build();
}
@Bean
public EntityManagerFactory entityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("edu.sjsu");
factory.setDataSource(dataSource());
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory());
return txManager;
}
}
如果您需要其他配置和java类来了解情况,请告诉我。
使用basePackages
在EnableJpaRepositories
:
@Configuration
@EnableJpaRepositories(basePackages = "edu.sjsu.models")
@EnableTransactionManagement
public class JpaConfig { ... }
默认情况下, EnableJpaRepositories
将扫描Spring Data存储库的带注释配置类的包。 因为,我猜,您的配置和存储库类在不同的包中,您应该告诉Spring Data JPA要扫描哪些基础包以便找到JPA存储库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.