JpaRepositoryを利用する (4/8)
作成:2015-08-08 10:59
更新:2015-08-08 10:59
更新:2015-08-08 10:59
■Bean設定クラスを利用する
Beanは、設定ファイルを使わず、クラスとして定義することもできましたね。では、これもやってみましょう。
com.tuyano.libro.dbパッケージの「SampleEntityConfig」クラスのソースコードを、下のリスト欄のように書き換えて下さい。そしてApp内の以下の文を修正し、Bean設定ファイルからこのSampleEntityConfigクラスを利用するように変更しておきましょう。
@Beanアノテーションを付けた、Bean作成用のメソッドとしては、「JpaTransactionManager」というメソッドが追加されています。これで、JpaTransactionManagerインスタンスを作成しreturnしています。みてばわかるように、new JpaTransactionManagerしたものを返しているだけです。引数には、EntityManagerFactoryインスタンスを渡すようにしています。
見ればわかるように、用意されているBean生成メソッドの中には、リポジトリ作成のためのものはありません。リポジトリは自動的にBean化されるのがよくわかりますね。
com.tuyano.libro.dbパッケージの「SampleEntityConfig」クラスのソースコードを、下のリスト欄のように書き換えて下さい。そしてApp内の以下の文を修正し、Bean設定ファイルからこのSampleEntityConfigクラスを利用するように変更しておきましょう。
ApplicationContext app = new↓
ClassPathXmlApplicationContext("dbbean.xml");
ApplicationContext app = new修正したら、Appを実行してみてください。先ほどと同じように、ダミーのデータが一覧表示されます。ここでは、まず目を引くのがクラス宣言の前にあるアノテーションでしょう。
AnnotationConfigApplicationContext(SampleEntityConfig.class);
@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化されるのがよくわかりますね。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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入門」に戻る