2013-04-17 1 views
1

У меня есть несколько взаимоисключающих источников данных, и я хочу настроить, какую реализацию внедрить/автоунивертировать в контроллер на основе свойства, определенного в файле конфигурации.Spring Dynamic поставщик услуг инъекций на основе конфигурации в файле свойств

Я думаю о чем-то вдоль линий @Qualifier, но я не эксперт по весне, поэтому я не могу понять механику.

Цель состоит в том, чтобы избежать свернутого if/else.

Любые идеи?

ответ

1

Вы можете сделать трюк с помощью context:property-placeholder и @Qualifier.

Это будет выглядеть следующим образом:

app.properties

some.implementation=com.example.MyServiceImpl 

весна файл контекста

<context:property-placeholder 
     location="classpath:/app.properties"/> 

<bean id="myService" class="${some.implementation}" /> 

Контроллер

@Autowired 
@Qualifier("myService") 
private MyService myService; 

В противоположном решении: вы можете сохранить в файл свойств боба ID и использовать его в @Qualifier

@Qualifier("${some.implementation.bean.id}") 

Но если вы используете Spring 3.1+, то вам, вероятно, нужно смотреть на Profiles механизм ,

+0

спасибо. Особенности профилей выглядят хорошо, особенно потому, что у меня будет несколько классов, выполняющих это динамическое поведение, и мы используем 3.1.2.RELEASE. будет исследовать как Tx –

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