Spring
默认使用JDK动态代理(
$Proxy58是其中之一),它只能代理接口。这意味着动态创建的类型
$Proxy58将实现由包装的/目标类(
UserDao)实现的一个或多个接口,但它不是其实际的子类。这基本上就是为什么您可以将
userDaobean强制转换为
Dao
接口 ,而不是强制转换为
UserDao类的原因 。
您可以
<tx:annotation-driven proxy-target-/>用来指示Spring使用CGLIB代理,它们是代理类的实际子类,但是我认为最好是针对接口进行编程。如果需要访问代理类中未在其接口之一中声明的某些方法,则应首先问自己,为什么会这样?
(此外,在上面的代码中,中没有引入新的方法
UserDao,因此将bean强制转换为这种具体的实现类型毫无意义。)
在Spring官方参考中了解有关不同代理机制的更多信息。



