protected @Autowired method can be overridden with non-annotated method to suppress injection; private @Autowired methods with same signature will be called individually across a hierarchy (SPR-6112)

This commit is contained in:
Juergen Hoeller
2009-09-15 15:52:13 +00:00
parent fa2bb722f0
commit fd81aa205d
3 changed files with 65 additions and 17 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2008 the original author or authors.
* Copyright 2002-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -146,6 +146,32 @@ public final class AutowiredAnnotationBeanPostProcessorTests {
bf.destroySingletons();
}
@Test
public void testExtendedResourceInjectionWithSkippedOverriddenMethods() {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
bf.registerResolvableDependency(BeanFactory.class, bf);
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
bpp.setBeanFactory(bf);
bf.addBeanPostProcessor(bpp);
RootBeanDefinition annotatedBd = new RootBeanDefinition(OverriddenExtendedResourceInjectionBean.class);
bf.registerBeanDefinition("annotatedBean", annotatedBd);
TestBean tb = new TestBean();
bf.registerSingleton("testBean", tb);
NestedTestBean ntb = new NestedTestBean();
bf.registerSingleton("nestedTestBean", ntb);
OverriddenExtendedResourceInjectionBean bean = (OverriddenExtendedResourceInjectionBean) bf.getBean("annotatedBean");
assertSame(tb, bean.getTestBean());
assertNull(bean.getTestBean2());
assertSame(tb, bean.getTestBean3());
assertSame(tb, bean.getTestBean4());
assertSame(ntb, bean.getNestedTestBean());
assertNull(bean.getBeanFactory());
assertTrue(bean.baseInjected);
assertTrue(bean.subInjected);
bf.destroySingletons();
}
@Test
public void testExtendedResourceInjectionWithAtRequired() {
DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
@@ -934,7 +960,9 @@ public final class AutowiredAnnotationBeanPostProcessorTests {
private ITestBean testBean4;
private BeanFactory beanFactory;
protected BeanFactory beanFactory;
public boolean baseInjected = false;
public ExtendedResourceInjectionBean() {
}
@@ -950,6 +978,11 @@ public final class AutowiredAnnotationBeanPostProcessorTests {
this.nestedTestBean = nestedTestBean;
}
@Autowired
private void inject(ITestBean testBean4) {
this.baseInjected = true;
}
@Autowired
protected void initBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
@@ -978,6 +1011,27 @@ public final class AutowiredAnnotationBeanPostProcessorTests {
}
public static class OverriddenExtendedResourceInjectionBean extends ExtendedResourceInjectionBean<NestedTestBean> {
public boolean subInjected = false;
@Override
public void setTestBean2(TestBean testBean2) {
super.setTestBean2(testBean2);
}
@Override
protected void initBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
@Autowired
private void inject(ITestBean testBean4) {
this.subInjected = true;
}
}
public static class OptionalResourceInjectionBean extends ResourceInjectionBean {
@Autowired(required = false)