2016-05-03 70 views
2

我目前正在開始使用與JPA/Hibernate結合使用spring-data的項目。 現在,我注射JpaRepositories使用上有問題的性質@Autowired註釋,如: Spring - 在不使用自動裝配的情況下在xml-config中注入JpaRepository

@Component 
public class EmployeeGenerator implements IDataGenerator { 
... 
    @Autowired 
    private IEmployeeDao  dao; 
... 
} 

..其中IEmployeeDao是被註釋爲@Repository接口擴展JpaRepository:

@Repository 
public interface IEmployeeDao extends JpaRepository<Employee, Integer> { 

    /** 
    * Finds employees by username. 
    * 
    * @param username the username 
    * @return the list of employees 
    */ 
    List<Employee> findByUsername(String username); 

一切工作正常使用這種方法 - 但是,我寧願習慣做我的大多數XML配置工作,因爲我個人喜歡所有相關的配置是在同一個地方,乍一看可見的想法。

現在,據我瞭解JPA和spring-data,存儲庫實例以某種方式由JPA實體管理器創建,所以我應該能夠在spring config xml中使用..指定它們作爲bean ..某種工廠方法? 我想我在尋找的線沿線的東西:

<import resource="classpath:spring/db-context.xml"/> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="..."/> 
    <property name="dataSource" ref="..."/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> 
    </property> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop> 
      <prop key="hibernate.hbm2ddl.auto">create</prop> 
      <prop key="hibernate.connection.charSet">UTF-8</prop> 
     </props> 
    </property> 
</bean> 
... 
<bean id="employeeDaoImpl" class="IEmployeeDao"> 
    <factory-method="?????"> <!-- Is something like this possible??? --> 
</bean> 

一些閱讀我猜想,自動裝配的倉庫是「建議」的方式後,我確實看到了一些好處做這樣, 但仍然出於興趣,我希望得到它與純xml配置(或至少沒有@Autowired,這是)

回答

3

您可以聲明使用<jpa:repositories />存儲庫。然後,您可以在XML配置中使用存儲庫引用。

<?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.acme.repositories" /> 

</beans:beans> 

在這種情況下,我們指導春季掃描擴展存儲庫或它的子接口一個接口com.acme.repositories及其所有子包。對於找到的每個接口,它都將註冊持久化技術特定的FactoryBean,以創建處理調用查詢方法的相應代理。這些bean中的每一個都將在從接口名稱派生的bean名稱下注冊,因此UserRepository的接口將在userRepository下注冊。 base-package屬性允許使用通配符,以便您可以使用掃描軟件包的模式。

您可以在文檔閱讀更多關於它:http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/repositories.html#repositories.create-instances

相關問題