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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user