2013-11-24 47 views
2

我正在通過示例應用程序(在教程enter link description here後面)學習Spring數據JPA,但一直在讓我的JPA存儲庫工作。無法自動連接Spring數據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> 

Main類

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

但每次我運行這個,我得到nullproductRepo。任何人都可以告訴我我在這裏失蹤了什麼?

編輯:爲自動裝配創建了一個實現類。

回答

2

Spring只能將bean注入Spring創建的其他Spring bean。你創造了你使用

new MainClass() 

所以春天是完全不知道該對象的存在並不能奇蹟般地注入任何東西到這個對象MainClass的實例。

您需要創建一個Spring上下文,請求它爲bean,然後使用此bean。

閱讀文檔中的introduction to Spring

+0

請閱讀我編輯的帖子。我現在創建了一個實現類來允許自動裝配,但它仍然不起作用。 – ishan

+0

重新閱讀我的答案,並閱讀我鏈接到的文檔。您仍然沒有創建Spring應用程序上下文,並且您仍然沒有爲上下文請求一個bean,但是您仍然在用新的方式創建一個對象,並期望Spring自動調用它。 –