Как выполнить инъекцию конструктора в этом сценарии?

Предположим, у нас есть имя класса A.java. В классе A.java у нас есть конструктор по умолчанию

A(){
}

и один пользовательский конструктор имеет такой параметр, как

A(B b){
super(b);
}

Теперь класс C расширяет класс A, чтобы использовать геттер класса A. Снова C имеет конструктор с одним параметром, например

C(A a)
{
 this.a = a;
}

Снова у нас есть один класс D, в котором у нас есть конструктор вроде

D(C c )
{this.c = c;
}

Теперь мой вопрос: как мы можем выполнить инъекцию пружинной конструкции в этом сценарии?


person CodeFreak    schedule 23.10.2014    source источник
comment
возможный дубликат внедрения зависимостей Spring в конструктор с аннотациями   -  person BetaRide    schedule 23.10.2014
comment
А в чем именно ваша проблема? Вы хотите, чтобы все создавали bean-компоненты для всех классов или только для класса D? Вы хотите иметь все в XML или использовать аннотации?   -  person Tomasz W    schedule 23.10.2014
comment
Несколько расплывчато. Не могли бы вы уточнить и предоставить более полный (компилируемый) пример? Таким образом, C расширяет A (а также делегирует некоторым A?). Я предполагаю, что ваша иерархия классов слишком сложна - в Spring вы предпочитаете использовать композицию, а не наследование.   -  person Gyro Gearless    schedule 23.10.2014
comment
@Tomasz W Я хочу все в applicationContext.xml   -  person CodeFreak    schedule 23.10.2014
comment
@TomaszW Я хочу создать компонент для всего класса   -  person CodeFreak    schedule 23.10.2014
comment
@GyroGearless Мое требование отличается, но я использую алфавиты, чтобы четко понимать проблемы.   -  person CodeFreak    schedule 23.10.2014
comment
Может ли кто-нибудь написать какой-нибудь прототип для XML-файла, относящегося к моему требованию. Это мне очень поможет.   -  person CodeFreak    schedule 23.10.2014


Ответы (1)


Вот контекст, который я написал:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

    <bean id="a" class="com.my.springtest.A">
        <constructor-arg ref="b"/>
    </bean>

    <bean id="b" class="com.my.springtest.B"/>

    <bean id="c" class="com.my.springtest.C">
        <constructor-arg ref="a"/>
    </bean>

    <bean id="d" class="com.my.springtest.D">
        <constructor-arg ref="c"/>
    </bean>

</beans>

Сохраните этот файл и поместите его в свой путь к классам (например, src/main/resources, если вы используете maven). Затем вы можете создать этот контекст в junit:

@ContextConfiguration(locations = { "classpath:/test-context.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringTest {

    @Autowired
    private D d;

    @Test
    public void testBean() {
        Assert.assertNotNull(d);
    }
}
person Tomasz W    schedule 23.10.2014