ignoreDependencyInterface的主要功能是忽略给定接口实现类中,对实现接口通过set注入的实例类型,会忽略自动装配,也就是当有忽略的接口类,自动装配会忽略接口方法注入的实例类的自动装配,因为自动装配会覆盖我们实现接口类的方法注入结果
调用ignoreDependencyInterface方法,会把对应类放入
AbstractAutowireCapableBeanFactory中的
private final Set<Class<?>> ignoredDependencyInterfaces集合中,
在populateBean中每次属性注入会调用方法:
protected boolean isExcludedFromDependencyCheck(PropertyDescriptor pd) { return AutowireUtils.isExcludedFromDependencyCheck(pd) || this.ignoredDependencyTypes.contains(pd.getPropertyType()) || AutowireUtils.isSetterDefinedInInterface(pd, this.ignoredDependencyInterfaces); }
该方法就是判断注入的属性是否有ignoreDependencyInterface,有的话调用下面方法,忽略属性:
protected PropertyDescriptor[] filterPropertyDescriptorsForDependencyCheck(BeanWrapper bw) { List<PropertyDescriptor> pds = new ArrayList(Arrays.asList(bw.getPropertyDescriptors())); pds.removeIf(this::isExcludedFromDependencyCheck); return (PropertyDescriptor[])pds.toArray(new PropertyDescriptor[0]); }