Пользовательская аннотация Spring для этого поведения - PullRequest
1 голос
/ 19 февраля 2020

У меня есть такой код.

@org.springframework.stereotype.Component("studentInfo")
@org.springframework.context.annotation.Profile("studentInfo")
public class CustomStudentInfo{

Как вы можете видеть, у меня есть имя компонента и тот же профиль, я имею в виду, я просто хочу установить этот класс как боб, только когда профиль установлен и Дело в том, что это работает, но немного раздражает, когда я набираю это в 2 строки. Мой вопрос: могу ли я иметь это в пользовательской аннотации? Я имею в виду аннотацию, которая помогает мне просто написать.

@CustomSpringAnnotation("studentInfo")
public class CustomStudentInfo{

Спасибо и извините, если вопрос прост.

1 Ответ

1 голос
/ 19 февраля 2020

Вы можете «включить» аннотации Spring в пользовательский, например (источник / подтверждение: SpringBootApplicaiton исходный код ):

package my.package.annotations;

@org.springframework.stereotype.Component("studentInfo") // needs "constant expression" here 
@org.springframework.context.annotation.Profile("studentInfo") // .. and here!
public @interface MyCustomSpringAnnotation { ...
    // but here you have a problem,
    // since you cannot pass (at least not to the above annotations,
    // ... but maybe dynamically *hack* into the spring context):
    String value() default ""; //?
}

... тогда вы можете использовать его как :

@MyCustomSpringAnnotation 
public class CustomStudentInfo { // ...

, но с фиксированным «studentInfo» это не улучшение (а наоборот).


Вероятно, «самое пружинное» и лучшее решение (без стресса) с «слишком большим количеством аннотаций»): потреблять "studentInfo" из «видимой» (stati c) конечной переменной (вероятно, лучшей в соответствующем классе):

@org.springframework.stereotype.Component(CustomStudentInfo.PROFILE_NAME)
@org.springframework.context.annotation.Profile(CustomStudentInfo.PROFILE_NAME)
public class CustomStudentInfo {

    public static final String PROFILE_NAME = "studentInfo";
    // ...
...