Spring - 在xml-config中注入JpaRepository而不使用自动装配

时间:2016-05-03 04:09:50

标签: java spring hibernate jpa

我目前正在开始一个将spring-data与JPA / Hibernate结合使用的项目。 现在,我正在使用有关属性的@Autowired注释注入JpaRepositories,例如:

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

..其中IEmployeeDao是一个扩展JpaRepository的接口,注释为@Repository:

@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完成大部分弹簧配置工作,因为我个人喜欢所有相关配置的概念在同一个地方并且第一眼就能看到。< / p>

现在,据我了解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>

经过一些阅读后,我想自动装配存储库是“推荐”方法,我确实看到了这样做的一些好处, 但仍然,出于兴趣,我想让它使用pure-xml配置(或至少没有@Autowired,即)

1 个答案:

答案 0 :(得分:3)

您可以使用SELECT * FROM (SELECT name, mark FROM grades ORDER BY mark DESC LIMIT 5) AS t1 UNION ALL SELECT * FROM (SELECT name, mark FROM grades ORDER BY mark LIMIT 5) AS t2 声明存储库。然后,您可以在XML配置中使用存储库引用。

<jpa:repositories />
  

在这种情况下,我们指示Spring扫描com.acme.repositories及其所有子包,以查找扩展Repository或其子接口的接口。对于发现的每个接口,它将注册持久性技术特定的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