1

hibernate を spring と統合する場合、通常は @Repository spring アノテーションによるアノテーション ベースのアプローチを実装します。私は、私たちのdaoの春の依存関係を排除するために、そしてhibernate3がセッションを管理するためのコンテキストセッションをサポートしているので、それを行う目的を学びました

@Repository
public class HibernateSpitterDao implements SpitterDao{

privateSessionFactorysessionFactory;

@Autowired
public HibernateSpitterDao(SessionFactory sessionFactory){
  this.sessionFactory=sessionFactory;
}

private SessioncurrentSession(){
  return sessionFactory.getCurrentSession();
}
...
}

たとえば、アノテーション ベースのアプローチを使用しない場合、dao は、HibernateDaoSupport を拡張する必要があるなど、Spring 固有のクラスに直接依存します。

しかし、注釈があっても、DAO は Spring に依存しています。@Repository はスプリング アノテーションであるためです。スプリングノウと完全に独立することはできませんか?スプリングクラスに依存するよりも、スプリングアノテーションに依存する方がいいですね。

しばらくして、スプリングを別のものに切り替える必要があると思っていました。その場合、DAO がスプリングとまったく依存していない場合、DAO にまったく触れる必要はありません。

4

2 に答える 2

4

完全なデカップリングを実現するには、すでに発見したように、アノテーションから離れなければなりません。春の XML ベースの構成を使用するか、Bean ファクトリを構築する@Configurationクラス (別名 Java ベースの構成) を作成する必要があります。

私はあなたの考えについてコメントしたいだけです。「将来いつか切り替えたいと思うかもしれない」という理由で、完全に分離されたソリューションに時間を費やすことは、私には多くの時間を無駄にしているように思えます。そのような切り替えが予見可能な将来、またはそれまでに行われると疑ったり、想定したりする理由はありますか? デカップリングにはコストがかかりますが、これは明確です。見やすい注釈の代わりに、XML ファイルや構成クラスを維持する必要があります。これらは両方とも非常に複雑になり、しばらくすると概要を把握するのが難しくなります。

于 2012-09-03T08:47:14.160 に答える
0

あなたが提供した例は、Spring に強く依存しているとは言えません。使用している唯一の Spring コンポーネントは @Repository アノテーションです。これは、1) @Component として機能し、コンポーネントがクラスをスキャンできるようにし、2) クラスをデータ アクセス変換 ( Source ) の対象にします。

これは、実装をSpringにまったく結合していません。代わりに、Hibernate の Session Factory を使用しており、それに結合されています。実装が Hibernate と結合されていても問題ありません。

実際、それがインターフェースを定義し、それをさまざまに実装することの全体的な目的です。この場合、SpitterDAO インターフェースと HibernateSpitterDAO 実装があります。将来、iBatis または Spring の HibernateTemplate または JDBCTemplate を利用することにした場合は、別の実装を作成できます。

春は、ほとんどの場合、あなたの邪魔にならないようにしようとします。依存性注入を管理するためのコンテナーとして主に使用され、実際にはコードが「接着」される方法を調整するだけです。ApplicationSessionAware や BeanPostProcessor などを実装するクラスがある場合、コードは Spring と密接に結合されると思いますが、これはできるだけ避けたいと考えています。

そして、SessionFactory と Spring の HibernateTemplate の間の長所/短所を知っているかどうか確信が持てなかったという理由だけで、これらを比較および制約する SpringSource からの素晴らしいブログ投稿があります: http://blog.springsource.org/2007/06/26/ so-sho-sho-you-still-use-springs-hibernatetemplate-andor-jpatemplate/

ブログ投稿からの最終的な提案のスニペットを次に示します。

要するに (HibernateTemplate および JpaTemplate の JavaDoc で既に言及されているように) 新しいプロジェクトで Hibernate または JPA をそれぞれ使い始める場合は、Session および/または EntityManager API を直接使い始めることをお勧めします。非侵襲的であるため、これはもう 1 つの優れた例です。

于 2012-09-03T09:24:25.283 に答える