上这堂课:
public interface DeviceRule {
}
还有这个
@Service(value = "androidRule")
@Transactional(propagation = Propagation.REQUIRED)
public class AndroidRule implements DeviceRule {
..
}
在服务中调用此方法可以正常工作,获取AndroidRule
Map<?, DeviceRule> map = BeanFactoryUtils.beansOfTypeIncludingAncestors(context, DeviceRule.class, true, false);
但不是这个:
BeanFactoryUtils.beanOfType(context, AndroidRule.class, true, false);
当我得到这个错误:
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'androidRule' must be of type [com.devices.AndroidRule], but was actually of type [com.sun.proxy.$Proxy302]:org.springframework.beans.factory.BeanNotOfRequiredTypeException:Bean named 'androidRule' must be of type [com.devices.AndroidRule], but was actually of type [com.sun.proxy.$Proxy302]
任何想法 ?
最佳答案
当您向类添加@Transactional
批注时,spring会为此创建一个代理,以便通过begin,commit和rollback对其进行增强。
当您调用BeanFactoryUtils.beanOfType
时,它将尝试返回给定类型的唯一bean。在您的情况下,有两个(包括代理)。因此,它失败。
您能检查BeanFactoryUtils.beansOfTypeIncludingAncestors
返回多少豆。