无法自动装配Spring数据JPA存储库

时间:2013-11-24 10:11:59

标签: spring jpa spring-data-jpa

我是通过示例应用程序(遵循enter link description here的教程)学习Spring数据JPA,但却陷入了让我的JPA存储库工作的问题。

产品库(产品是实体)

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

}

ProductRepositoryImpl

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);
    }
}

弹簧配置

<?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();
    }
}

但每次我运行时,我都会null productRepo。谁能告诉我,我在这里失踪了什么?

编辑:为自动装配创建了一个实现类。

1 个答案:

答案 0 :(得分:2)

Spring只能将bean注入Spring创建的其他Spring bean中。您可以使用

创建MainClass实例
new MainClass()

所以Spring完全没有意识到这个对象的存在,并且不能神奇地将任何东西注入到这个对象中。

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

阅读文档中的introduction to Spring