課程
/后端開發
/Java
/Spring入門篇
為什么在測試方法中接收類型必須要使用接口類型,而不能使用具體的實現類?在配置ProxyFactoryBean的時候不是指定了具體的target了么?
2016-02-23
源自:Spring入門篇 6-2
正在回答
代理類代理的應該是接口,而不是接口的具體實現類。接口指的是一類的事情,所以代理接口才有意義。比如中介代理的表面上是某個房東,其實是代理出租一類的事情。
試了一下,是這樣的,如果?BizLogicImpl 實現了接口,就必須使用接口類型,否則可以不用
貌似確實必須使用接口
知道為什么了嗎?
<bean id="bizLogicImplTarget" class="com.imooc.aop.api.BizLogicImpl"></bean>???? <bean id="bizLogicImpl" class="org.springframework.aop.framework.ProxyFactoryBean">??? <property name="proxyInterfaces">?? ??? ?<value>com.imooc.aop.api.BizLogic</value>??? </property>?? ??? ?<property name="target">?? ??? ??? ?<!-- <bean class="com.imooc.aop.api.BizLogicImpl"></bean> -->?? ??? ??? ? <ref bean="bizLogicImplTarget"/> ?? ??? ?</property>?? ??? ?<property name="interceptorNames">?? ??? ??? ?<list>?? ??? ??? ??? ?<value>moocBeforeAdvice</value>?? ??? ??? ??? ?<value>moocAfterReturningAdvice</value>?? ??? ??? ??? ?<value>moocMethodInterceptor</value>?? ??? ??? ??? ?<value>moocThrowsAdvice</value>?? ??? ??? ?</list>?? ??? ?</property>??? </bean>
如上述在XML文件中所示,為BizLogicImpl創建代理。那么在測試方法中得到的就是一個代理類,而這個代理類的類型是<property name="proxyInterfaces">?? ??? ?<value>com.imooc.aop.api.BizLogic</value>??? </property>里面設置的接口的類型。
就是說得到的JDK代理類型是BizLogic類型的,而你在測試方法中用BizLogic的實現類BizLogicImpl來接受這個代理,顯然類型不能從父類轉換成子類,所以報了ClassCastException。
我在嘗試使用具體類的時候異常了。?
可以使用具體實現類。
至于為什么使用接口類型,這是面向對象的思想。這個要你理解了面向對象的設計原則及其好處,才能理解為何常用接口。
舉報
為您帶來IOC和AOP的基本概念及用法,為后續高級課程學習打下基礎
5 回答注入的為什么是接口而不是實現類,如果有多個實現類調用同一個方法實現是那個類?
1 回答教程中的測試類TestInjection使用問題 ,是否能通過Autowired注入來實現測試功能
2 回答super不是子類調用父類的方法呢,接口也能用么。還有getBean是哪來 的?
4 回答list和map泛型不是<BeanInterface>這個接口類型嗎?那里面的東西應該是BeanInterface的對象啊,為什么注解注入進去的是BeanInterface這個接口的實現類??
3 回答bean作用域的類型
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2021-03-07
代理類代理的應該是接口,而不是接口的具體實現類。接口指的是一類的事情,所以代理接口才有意義。比如中介代理的表面上是某個房東,其實是代理出租一類的事情。
2017-02-13
試了一下,是這樣的,如果?BizLogicImpl 實現了接口,就必須使用接口類型,否則可以不用
2017-02-13
貌似確實必須使用接口
2016-10-12
知道為什么了嗎?
2016-05-11
<bean id="bizLogicImplTarget" class="com.imooc.aop.api.BizLogicImpl"></bean>
???? <bean id="bizLogicImpl" class="org.springframework.aop.framework.ProxyFactoryBean">
??? <property name="proxyInterfaces">
?? ??? ?<value>com.imooc.aop.api.BizLogic</value>
??? </property>
?? ??? ?<property name="target">
?? ??? ??? ?<!-- <bean class="com.imooc.aop.api.BizLogicImpl"></bean> -->
?? ??? ??? ? <ref bean="bizLogicImplTarget"/>
?? ??? ?</property>
?? ??? ?<property name="interceptorNames">
?? ??? ??? ?<list>
?? ??? ??? ??? ?<value>moocBeforeAdvice</value>
?? ??? ??? ??? ?<value>moocAfterReturningAdvice</value>
?? ??? ??? ??? ?<value>moocMethodInterceptor</value>
?? ??? ??? ??? ?<value>moocThrowsAdvice</value>
?? ??? ??? ?</list>
?? ??? ?</property>
??? </bean>
如上述在XML文件中所示,為BizLogicImpl創建代理。那么在測試方法中得到的就是一個代理類,而這個代理類的類型是<property name="proxyInterfaces">
?? ??? ?<value>com.imooc.aop.api.BizLogic</value>
??? </property>里面設置的接口的類型。
就是說得到的JDK代理類型是BizLogic類型的,而你在測試方法中用BizLogic的實現類BizLogicImpl來接受這個代理,顯然類型不能從父類轉換成子類,所以報了ClassCastException。
2016-02-25
我在嘗試使用具體類的時候異常了。?
2016-02-24
可以使用具體實現類。
至于為什么使用接口類型,這是面向對象的思想。這個要你理解了面向對象的設計原則及其好處,才能理解為何常用接口。