2012-04-25 5 views
4

Можно создать дубликат:
Anyway to @Autowire a bean that requires constructor arguments?Весна - autowire класс, есть конструктор

В мой контроллер я хочу использовать @Autowired, чтобы ввести класс, используя метод/конструктор автоматического связывания. например, с помощью:

@Autowired 
private InjectedClass injectedClass; 

Моя проблема заключается в том, что введенные injectedClass класса есть конструктор, и мне нужно передать переменную в конструктор от контроллера. Как передать значения конструкторам?

+0

Тим, я не думаю, что это Дублировать вопрос – webmobileDev

ответ

3

Вы можете либо пометить частные данные с помощью аннотации @Resource(name = "x"), либо провести их с помощью вставки конструктора в контексте приложения XML.

Аннотации и конфигурация XML могут быть смешаны весной. Это не должно быть ничего или ничего.

<bean id="myClass" class="foo.bar.MyClass"> 
    <constructor-arg ref="yourArgRefHere"/> 
</bean> 
+0

но yourArgRefHere некоторые вещи динамический, что мне нужно послать код – webmobileDev

+0

Это трудно сказать, не больше контекста. Возможно, это не должно быть под контролем Весны; возможно, вам нужна фабрика, управляемая весной, где вы просто проходите ключ. Я не знаю. – duffymo

5

Если вы используете аннотации вы можете применить @Autowired аннотацию к конструктору MyClass, который будет автоматически проволочные бобы вы передаете в специальный конструктор MyClass в. Рассмотрим следующий пример.

public class MovieRecommender { 

    @Autowired 
    private MovieCatalog movieCatalog; 

    private CustomerPreferenceDao customerPreferenceDao; 

    @Autowired 
    public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) { 
     this.customerPreferenceDao = customerPreferenceDao; 
    } 

    // ... 
} 
+0

вы пропустили меня поняли, мне нужен динамический конструктор для CustomerPreferenceDao – webmobileDev

+0

@webmobileDev - Вы не упомянули нигде в своем вопросе ... – James111

Смежные вопросы