С Spring 3.1 и профилями становится интересным создание настраиваемого интерфейса для определения конкретных профилей. Часть красоты - это способность полностью забыть имя строки профиля и просто использовать аннотацию.Как получить имя профиля Spring из аннотации?
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile("Dev")
public @interface Dev {
}
А затем просто аннотация бобы с @Dev
. Это отлично работает.
Однако, как я могу проверить, активен ли профиль @Dev
? Environment.acceptsProfiles()
требует аргумент String. Есть ли «аккуратный» способ сделать это, или это мой единственный вариант, чтобы сделать что-то вроде:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile(Dev.NAME)
public @interface Dev {
public static String NAME = "Dev";
}
public class MyClass{
@Autowired
private Environment env;
private void myMethod(){
if(env.acceptsProfiles(Dev.NAME))
// do something here
;
}
Хотя функциональный, я не особенно люблю эту концепцию. Есть ли другой способ сделать это более аккуратным?
Почему вы пытаетесь явно проверить? – chrylis
@chrylis Поскольку мне нужно включить определенные вещи в моем интерфейсе на основе выбора профиля, так что хотите передать логический флаг на передний конец jsps –
Хмм. Поскольку вы пытаетесь абстрагировать имя профиля в первую очередь, я думаю, вам придется либо проследить путь мета-аннотации, либо, возможно, зарегистрировать компонент в профиле. – chrylis