考えます
顧客のケースでは、そのカスタムCustomerDaoを発見し、そして、これらの方法では正確にどのように行うには、あなたがこれらのメソッドの多くを使用することができます任意の方法を提供していませんでしたか?答えは簡単で、私たちのカスタムダオのためのインタフェース、JpaRepositoryとJpaSpecificationExecutorからの継承であるので、我々は両方のインターフェイスのすべてのメソッドを使用することができます。
インターフェースで定義され、これらの方法を使用することができるようにスプリングデータJPA、一般的な実現JpaRepositoryとJpaSpecificationExecutorインターフェースを使用して、これらは単に文、不特定の実装の一部である場合、それはスプリングデータJPAを達成する方法でありますそれは?
プロセス分析
プログラムが実行されると、JdkDynamicAopProxy方法を呼び出す動的プロキシがcustomerDaoオブジェクトオブジェクトを生成します。知識を導入春データJPAによると、findOneのクエリメソッドを実行するために、最終的にはJPAのAPI仕様は、その後、それが存在する場合の基本的なコードを実行されますか?答えはJdkDynamicAopProxyそれらによって生成される動的プロキシオブジェクトに隠された、シンプルであり、この動的プロキシオブジェクトはSimpleJpaRepositoryです
1 我々は唯一のインタフェース記述が、実装クラスを書いていない、実装クラスは、注入され、実行時に春のプロキシオブジェクトです。 2 .Springは、DAO実装クラスを生成する方法を知っていますか?インターフェイスは、設定ファイルで指定されたパッケージのDAOの存在であるため、
<JPA:リポジトリベースパッケージ= "cn.oracle.dao"
トランザクションマネージャ-REF = "のTransactionManager"
エンティティ・マネージャ・ファクトリ-REF = "のEntityManagerFactory"> </ JPA:リポジトリ>
3 。生成されたオブジェクトとは何ですか?プロキシオブジェクトは:たとえば、Proxy.newProxyInstanceの動的プロキシオブジェクト(クラスローダ、のInvocationHandler実装されたインタフェースのリスト)JdkDynamicAopProxyによって生成されたJDK:このオブジェクトのInvocationHandlerインタフェース達成され、このクラスは、invokeメソッド有する
4 invokeメソッドJdkDynamicAopProxyです。オブジェクトの実際の作業である対象物が存在する
5 実際の作業は、オブジェクト:. SimpleJpaRepository
6 .SimpleJpaRepository DAOインタフェース継承我々は、2つのインターフェイス、それは確かに、このクラスのすべてのインターフェースのメソッドがあることを実現
7我々のfindOne法と呼ばem.findメソッドを参照してください、最後にEMは誰ですか?