为什么在测试方法中接收类型必须要使用接口类型,而不能使用具体的实现类?
为什么在测试方法中接收类型必须要使用接口类型,而不能使用具体的实现类?在配置ProxyFactoryBean的时候不是指定了具体的target了么?
为什么在测试方法中接收类型必须要使用接口类型,而不能使用具体的实现类?在配置ProxyFactoryBean的时候不是指定了具体的target了么?
2016-02-23
<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。
举报