Spring | JpaRepository 이용 | Bean설정 파일 준비


그럼 Bean 설정 파일을 준비해 보자. 먼저, dbbean.xml라는 파일을 준비하고 있다. 그걸 그대로 다시 사용하도로 하겠다.

아래와 같이 dbbean.xml 소스 코드 내용을 다시 작성하자.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/jdbc 
        http://www.springframework.org/schema/jdbc/spring-jdbc.xsd  
        http://www.springframework.org/schema/data/jpa 
        http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
 
    <jdbc:embedded-database id="dataSource" type="H2" />
 
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="generateDdl" value="true" />
            </bean>
        </property>
    </bean>
         
    <jpa:repositories base-package="com.devkuma.spring.db" />
     
    <bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
</beans>

이번에는 Bean 관련 태그가 2개가 추가되어 있다. 먼저 JpaRepository에 대한 태그가 하나 포함되어 있다.

<jpa:repositories base-package="com.devkuma.spring.db"/>

이 <jpa:repositories> 태그에는 base-package라는 속성이 포함되어 있다. 이제 검색할 위치(패키지)를 지정한다. 이렇게 하면 지정된 패키지 내에서 JpaRepository을 찾아서 Bean 화한다.

다른 하나는 “트랜잭션 관리자"라는 Bean이다. 이것은 트랜잭션을 관리하기 위한 것으로, 다음과 같이 작성되어 있다.

<bean id="transactionManager"
    class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</ bean>

여기에 정의되어 있는 것은 “transactionManager"라는 이름의 Bean으로써, class에는 JpaTransactionManager 클래스를 지정한다. 다른 “entityManagerFactory"라는 속성이 있는데, 이것은 작성하는 Bean에서 사용하는 EntityManagerFactory를 지정한다 (위에 있는 id=“entityManagerFactory"를 ref로 지정되어 있다).

이것으로 JpaRepository를 이용하는데 필요한 Bean의 준비가 되었다. “어? 아까 준비한 SampleEntityRepository은 Bean으로 준비해야 하지 않나?“라고 생각할 수 있는데, 이것은 필요하지 않다. <jpa:repositories>에 의해 지정된 패키지를 검색하고 @repository가 지정된 JpaRepository를 Bean으로 자동 등록하게 되는 것이다. 따라서 별도로 <bean>를 준비 할 필요는 없다.