На работе для конкретного случая мы используем:Почему нельзя использовать простые типы проводов?
context.getAutowireCapableBeanFactory().autowireBeanProperties(
serializer, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false
);
Сегодня я должен был autowire значения на моем сериализаторе бобе, который предоставляется в FactoryBean
.
Моя первая попытка состояла только в том, чтобы использовать простой id фабрики, но это не сработало.
После того, что я пытался много решений я читал здесь, используя @Resource
, @Autowired
, @Qualifier
и т.д ...
Наконец после просмотра, как инъекция фасоли работала, я обнаружил, что весна никогда не впрыскивать «простые свойства»
/**
* Return an array of non-simple bean properties that are unsatisfied.
* These are probably unsatisfied references to other beans in the
* factory. Does not include simple properties like primitives or Strings.
* @param mbd the merged bean definition the bean was created with
* @param bw the BeanWrapper the bean was created with
* @return an array of bean property names
* @see org.springframework.beans.BeanUtils#isSimpleProperty
*/
protected String[] unsatisfiedNonSimpleProperties(AbstractBeanDefinition mbd, BeanWrapper bw) {
Set<String> result = new TreeSet<String>();
PropertyValues pvs = mbd.getPropertyValues();
PropertyDescriptor[] pds = bw.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
if (pd.getWriteMethod() != null && !isExcludedFromDependencyCheck(pd) && !pvs.contains(pd.getName()) &&
!BeanUtils.isSimpleProperty(pd.getPropertyType())) {
result.add(pd.getName());
}
}
return StringUtils.toStringArray(result);
}
Я также нашел в весенней документации:
Пожалуйста, обратите внимание, что это не возможно в настоящее время т o autowire так называемые простые свойства, такие как примитивы, строки и классы (и массивы таких простых свойств). (Это по-дизайн и должно рассматриваться как функция.)
Наконец я знаю, почему мой завод боб не может привнести в моей собственности: фасоль впрыснуть является Enum, который является «простым свойством» (в соответствии с кодом)
Мне просто интересно, почему, по дизайну, запрещено автопроверить простые свойства, особенно в случае простого свойства, введенного FactoryBean
.
Кроме того, я вижу, как может возникнуть проблема с автопостановкой строки по типу, но автоустановка по имени, в чем дело?
Проверьте последнюю строку моего вопроса. Autowiring по имени должен иметь возможность работать, поскольку проводка xml для простых типов, по имени, работает ... –