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入門」に戻る