なぜ一般的なサービスが必要なのですか? サービス クラスは、複数のエンティティが関与する特定の作業単位を対象としています。リポジトリをコントローラーに直接挿入するだけです。
コンストラクター引数を使用した汎用リポジトリの例を次に示します。代わりに各メソッドをジェネリックにし、コンストラクター引数を持たないようにすることもできます。ただし、各メソッド呼び出しには、パラメーターとしてクラスが必要です。
public class DomainRepository<T> {
@Resource(name = "sessionFactory")
protected SessionFactory sessionFactory;
public DomainRepository(Class genericType) {
this.genericType = genericType;
}
@Transactional(readOnly = true)
public T get(final long id) {
return (T) sessionFactory.getCurrentSession().get(genericType, id);
}
汎用リポジトリの Bean 定義の例 - 異なるコンストラクター引数を使用して、複数の異なる Bean を持つことができます。
<bean id="tagRepository" class="com.yourcompnay.data.DomainRepository">
<constructor-arg value="com.yourcompnay.domain.Tag"/>
</bean>
リソース アノテーションを使用した Bean の依存性注入
@Resource(name = "tagRepository")
private DomainRepository<Tag> tagRepository;
そして、これにより、Domainreposiroty を特定のエンティティ/メソッド用にサブクラス化することができます。
public class PersonRepository extends DomainRepository<Person> {
public PersonRepository(){
super(Person.class);
}
...