libro
www.tuyano.com
初心者のためのSpring Framework入門

JpaRepositoryを利用する (4/8)

作成:2015-08-08 10:59
更新:2015-08-08 10:59

■Bean設定クラスを利用する

Beanは、設定ファイルを使わず、クラスとして定義することもできましたね。では、これもやってみましょう。

com.tuyano.libro.dbパッケージの「SampleEntityConfig」クラスのソースコードを、下のリスト欄のように書き換えて下さい。そしてApp内の以下の文を修正し、Bean設定ファイルからこのSampleEntityConfigクラスを利用するように変更しておきましょう。
ApplicationContext app = new 
    ClassPathXmlApplicationContext("dbbean.xml");
    ↓
ApplicationContext app = new 
    AnnotationConfigApplicationContext(SampleEntityConfig.class);
修正したら、Appを実行してみてください。先ほどと同じように、ダミーのデータが一覧表示されます。ここでは、まず目を引くのがクラス宣言の前にあるアノテーションでしょう。
@EnableJpaRepositories("com.tuyano.libro.db")
これは、JpaRepositoryをONにするためのものです。このアノテーションを記述することで、指定されたパッケージ内を検索し、@Repositoryを付けたクラスをBeanとして登録します。()内には、検索するパッケージを指定しておきます。<jpa:repositories>に相当するものと考えておくとよいでしょう。
@EnableTransactionManagement
こちらは、TransactionManagementを使うためのものです。これを用意しておくことでTransactionManagerがONになります。

@Beanアノテーションを付けた、Bean作成用のメソッドとしては、「JpaTransactionManager」というメソッドが追加されています。これで、JpaTransactionManagerインスタンスを作成しreturnしています。みてばわかるように、new JpaTransactionManagerしたものを返しているだけです。引数には、EntityManagerFactoryインスタンスを渡すようにしています。

見ればわかるように、用意されているBean生成メソッドの中には、リポジトリ作成のためのものはありません。リポジトリは自動的にBean化されるのがよくわかりますね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package com.tuyano.libro.db;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import javax.transaction.TransactionManager;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

@Configuration
@EnableJpaRepositories("com.tuyano.libro.db")
@EnableTransactionManagement
class SampleEntityConfig {

    @Bean
    public DataSource dataSource() {
        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        return builder.setType(EmbeddedDatabaseType.H2).build();
    }

    @Bean
    public EntityManagerFactory entityManagerFactory() {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);

        LocalContainerEntityManagerFactoryBean factory = new 
            LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("com.tuyano.libro.db");
        factory.setDataSource(dataSource());
        factory.afterPropertiesSet();

        return factory.getObject();
    }

    @Bean
    protected JpaTransactionManager transactionManager
            (EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}
※関連コンテンツ

「初心者のためのSpring Framework入門」に戻る