2015-11-20 2 views
0

У меня есть файл конфигурации, в котором я хочу создать разные компоненты в зависимости от профиля.Spring annotation @Profile запрещен для этого местоположения

По некоторым причинам, это работает:

@Configuration 
@Profile("myProfile") 
public class myClass { 

и это не, что дает сообщение об ошибке в Eclipse:

The annotation @Profile is disallowed for this location

@Bean 
@Profile("myProfile") 

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

The @Profile annotation may be used in any of the following ways:

  • as a type-level annotation on any class directly or indirectly annotated with @Component , including @Configuration classes
  • as a meta-annotation, for the purpose of composing custom stereotype annotations
  • as a method-level annotation on any @Bean method

Я использую Sping Framework 3.1.0, возможно, что применение на @Bean метод был введен только после того, как?

+0

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

+0

Я пытаюсь запустить тесты JUnit, используя эту конфигурацию компонента. Когда я запускаю тесты, я получаю это сообщение: java.lang.Error: проблема неразрешенной компиляции: \t Аннотации @Profile запрещены для этого местоположения – user2595581

ответ

5

Да, она была введена весной 4.

  • @Profile в версии 3.2.9.RELEASE только это позволяет аннотацию быть размещены на типе.

    @Target(value=TYPE)

  • @Profile в версии 4.0.0.RELEASE позволяет размещать эту аннотацию по типу и по методу.

    @Target(value={TYPE,METHOD})

3

В Spring 3.x профиля аннотации было ограничено к типу. С Spring 4 вы также можете использовать @Profile.

Вам необходимо обновить версию Spring до версии 4.

+0

Не могу этого сделать, я предпочитаю создавать классы разностей для каждого профиля I хочу – user2595581

+0

Да. Это допустимая альтернатива. –

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