У меня есть класс обслуживания, отмеченный аннотациями:
@Service(value="myService")
@Profile("test")
public class MyServiceImpl implements MyService{
...
}
Поэтому, если текущий профиль Spring "test", методы этого класса будут использоваться для сервиса myService. Хотя я хотел бы также иметь еще один класс с теми же аннотациями, возможно, с @Profile("!test")
который будет загружаться во всех других случаях, когда профиль не тестируется,
Как я могу это сделать без настройки чего-либо в файлах конфигурации Spring.xml Spring? Я хотел бы использовать просто аннотации.
Вам нужно определить другой bean-компонент так:
@Service(value="myServiceDefault")
public class MyServiceImpl implements MyService{
..
}
Затем измените исходный код для тестового профиля на:
@Service(value="myService")
@Profile("test")
@Primary
public class MyServiceImpl implements MyService{
...
}
Что это такое - зарегистрировать реализацию для всех используемых профилей, а затем, когда активен тестовый профиль, используется другая реализация из-за аннотации @Primary
Если вы используете Spring 4, вы можете придумать еще более сложные стратегии конфигурации, используя @Conditional аннотацию
myServiceDefault
и myService
!
Особенность была в работах экспериментально, и я думаю, что она превратилась в 4.