2013-03-22 4 views
0

Я новичок в Spring, и я застрял со сценарием, где мне нужна помощь. Мой сценарий: у меня есть определение компонента для некоторого определенного модуля, подобного этому.Весна впрыскивает одно свойство динамически

<bean name="ruleEngineAction" class="com.xxxxx.yyyy.UserAction" scope="prototype"> 
<property name="userManager"> 
    <ref bean="userManager" /> 
</property> 
<property name="userDto"> 
     <ref bean="userDto" /> 
</property> 
</bean> 

теперь в пределах этого боба я хочу использовать еще одно свойство, но это зависит от потока приложения, как

<property name="roleManager"> 
    <ref bean="roleManager"> 
</property> 

так я должна включать это свойство с в определении боба себя или я могу это сделать динамически в коде, потому что я не хочу, чтобы это свойство использовалось много.

Пожалуйста, предложите мне правильный и эффективный подход.

+2

Вы можете получить этот bean-код в своем коде, получив bean-компонент как 'ApplicationContext.getBean (« bean name »)' ..i не знаю, если это то, что вы хотели – Anubhab

ответ

2

Из того, что я понял из вопроса, существует только один компонент типа roleManager, но использование roleManager основано на потоке приложения.

В этом случае я бы рекомендовал вам ввести roleManager в ruleEngineAction, как и с любым другим компонентом, но используйте компонент только тогда, когда это необходимо.

Плохая практика для ненужной зависимости от весны в обычных классах, таких как добавление ссылки на applicationContext для динамического извлечения компонента во время выполнения.

0

Ну вам нужно добавить новое свойство с геттер и сеттер в классе com.xxxxx.yyyy.UserAction для roleManager как:

class UserAction { 
    // your previous properties userManager, userDto, etc. 

    private RoleManager roleManager; // assuming interface/class as RoleManager for roleManager 

    // getter and setter for roleManager 

    // your other action methods which will use roleManager 

} 
1

ли или нет, вы вводить этот компонент, то в любом случае будет создан Spring. Почему бы просто не включить свойство в ваш UserAction и использовать его или нет, можно решить в своем классе. Нет вреда в том, что в него вставляют фасоль, потому что вы будете использовать его для некоторых сценариев.

Если бы сценарий был похож, объект не будет создан, если вы не будете вводить/использовать, тогда было бы разумно рассмотреть эту ситуацию, но так как Spring будет создавать объект в любом случае, t быть проблемой, чтобы просто ввести его.

0

Нет проблем, если вы также вводите. При каждом доступе к этому классу он создаст объект этого класса.

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