上这堂课:

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返回多少豆。

07-24 21:39