為什麼spring注入介面正確而注入介面的實現類錯誤?
阿新 • • 發佈:2019-01-04
這是我在做spring和mybatis整合的時候出現的問題。
這個問題的根本在於動態代理類生成代理物件。動態代理有兩種的實現方式jdk和cglib的方式,這兩種方式也是AOP的,實現原理。
原因所在:出現如果直接注入實現類會出現沒有對應的bean,因為我們通過實現類來繼承的介面,然而,必須使用jdk提供的動態代理放法,而不使用介面直接對實現類進行注入,則為cglib的注入,而不能既繼承介面又使用實現類來注入的方式,這樣兩種代理類都是沒有辦法使用的。
解決方案:1.直接通過jdk去生成動態代理類,(原理要求必須實現介面)
2.通過cglib去實現介面,直接使用代理類,而不能實現介面。