diff --git a/src/main/java/us/codecraft/tinyioc/beans/factory/AutowireCapableBeanFactory.java b/src/main/java/us/codecraft/tinyioc/beans/factory/AutowireCapableBeanFactory.java index 740bcfb..c8ad864 100644 --- a/src/main/java/us/codecraft/tinyioc/beans/factory/AutowireCapableBeanFactory.java +++ b/src/main/java/us/codecraft/tinyioc/beans/factory/AutowireCapableBeanFactory.java @@ -26,18 +26,23 @@ protected void applyPropertyValues(Object bean, BeanDefinition mbd) throws Excep value = getBean(beanReference.getName()); } - try { - Method declaredMethod = bean.getClass().getDeclaredMethod( - "set" + propertyValue.getName().substring(0, 1).toUpperCase() - + propertyValue.getName().substring(1), value.getClass()); - declaredMethod.setAccessible(true); - - declaredMethod.invoke(bean, value); - } catch (NoSuchMethodException e) { - Field declaredField = bean.getClass().getDeclaredField(propertyValue.getName()); - declaredField.setAccessible(true); - declaredField.set(bean, value); + Method[] declaredMethods = bean.getClass().getDeclaredMethods(); + boolean hasMethod = false; + for (Method declaredMethod : declaredMethods) { + if (declaredMethod.getName().equals("set" + + propertyValue.getName().substring(0, 1).toUpperCase() + + propertyValue.getName().substring(1))) { + declaredMethod.setAccessible(true); + declaredMethod.invoke(bean, value); + hasMethod = true; + break; + } } - } - } + if (!hasMethod) { + Field declaredField = bean.getClass().getDeclaredField(propertyValue.getName()); + declaredField.setAccessible(true); + declaredField.set(bean, value); + } + } + } } diff --git a/src/test/java/us/codecraft/tinyioc/OutputServiceImpl.java b/src/test/java/us/codecraft/tinyioc/OutputServiceImpl.java index a840fe8..2c66517 100644 --- a/src/test/java/us/codecraft/tinyioc/OutputServiceImpl.java +++ b/src/test/java/us/codecraft/tinyioc/OutputServiceImpl.java @@ -4,10 +4,9 @@ * @author yihua.huang@dianping.com */ public class OutputServiceImpl implements OutputService { - + private HelloWorldService helloWorldService; @Override public void output(String text){ System.out.println(text); } - }