1. 程式人生 > >為什麼spring注入介面正確而注入介面的實現類錯誤?

為什麼spring注入介面正確而注入介面的實現類錯誤?

這是我在做spring和mybatis整合的時候出現的問題。

這個問題的根本在於動態代理類生成代理物件。動態代理有兩種的實現方式jdk和cglib的方式,這兩種方式也是AOP的,實現原理。

原因所在:出現如果直接注入實現類會出現沒有對應的bean,因為我們通過實現類來繼承的介面,然而,必須使用jdk提供的動態代理放法,而不使用介面直接對實現類進行注入,則為cglib的注入,而不能既繼承介面又使用實現類來注入的方式,這樣兩種代理類都是沒有辦法使用的。

解決方案:1.直接通過jdk去生成動態代理類,(原理要求必須實現介面)

   2.通過cglib去實現介面,直接使用代理類,而不能實現介面。