spring - 无法 Autowiring Spring 数据 JPA 存储库

标签 spring jpa spring-data-jpa

我正在通过示例应用程序学习 Spring data JPA(遵循 enter link description here 上的教程),但在让我的 JPA 存储库正常工作时遇到了困难。

产品存储库(产品是一个实体)

@Repository
public interface ProductRepository extends JpaRepository<Product , Long> {

}

产品存储库Impl

public class ProductRepositoryImpl {

    @Autowired
    private ProductRepository productRepo;

    /**
     * @return the productRepo
     */
    public ProductRepository getProductRepo() {
        return productRepo;
    }

    /**
     * @param productRepo the productRepo to set
     */
    public void setProductRepo(ProductRepository productRepo) {
        this.productRepo = productRepo;
    }

    public Product findOne(Long id) {
        return productRepo.findOne(id);
    }
}

Spring 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/data/jpa
    http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

    <repositories base-package="com.springtest" />
    <jpa:repositories base-package="com.springtest.repository"/>
    <context:component-scan base-package="com.springtest"/>
</beans:beans>

主类

public class MainClass {
    public static void main(String[] args) {
        Configuration configuration = new Configuration().configure();

        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
            .applySettings(configuration.getProperties())
            .buildServiceRegistry();
        SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();

        ProductRepositoryImpl productService = new ProductRepositoryImpl();
        Product product = productService.findOne(1L);
        session.close();
    }
}

但每次运行此命令时,productRepo 都会得到 null。谁能告诉我我在这里缺少什么吗?

编辑:创建 Autowiring 的实现类。

最佳答案

Spring只能将bean注入(inject)到由Spring创建的其他Spring bean中。您使用

创建 MainClass 实例
new MainClass()

所以 Spring 完全不知道这个对象的存在,也不能神奇地向这个对象注入(inject)任何东西。

您需要创建一个 Spring 上下文,向它请求一个 bean,然后使用这个 bean。

阅读introduction to Spring在文档中。

关于spring - 无法 Autowiring Spring 数据 JPA 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20173378/

相关文章:

java - 在运行时从配置文件创建和扩展 JPA 实体类

java - Spring Data JPA (Hibernate) 与动态条件的一对多关系

spring - 将 ParameterExpression 与 org.springframework.data.jpa.domain.Specification 一起使用时如何将参数传递给函数?

java - JPA:删除所有条目,然后在一个事务中重新创建单个条目

java - Spring MVC 中特定路径变量的可能值列表

java.sql.SQLException : ORA-00942: table or view does not exist with JPA entityManager. createQuery()

java - 我可以使用 sql INSERT 语句插入 java 实体并稍后使用 JPQL 检索它吗?

java - 使用 Spring JPA 处理软删除

java - spring-boot:使用硬编码文件名配置不同版本的属性文件?

java - spring jpa 审计 lastmodifiedby 和 lastmodifiedDate 是可以的,但是 createdBy 和 createdDate 注解总是 null