Spring 此行为的自定义注释

Spring custom annotation for this behavior

我有这样的代码。

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

如您所见,我有组件名称和相同的配置文件,我的意思是我只想将此 class 设置为一个 bean,仅当配置文件已设置且事实上这是有效的,但有点烦人在 2 行上输入这个我的问题是我可以在自定义注释上有这个我的意思是一个帮助我写作的注释。

@CustomSpringAnnotation("studentInfo")
public class CustomStudentInfo{

谢谢,抱歉,如果问题很简单。

您可以 "incorporate" 将 spring 注释变成自定义注释,例如 (source/proof: SpringBootApplicaiton source code):

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" 它没有改善(相反)。


可能 "most spring-like" 和最佳解决方案("too many annotations" 没有压力)是:从 "visible"(静态)最终变量(可能是最好的)消耗 "studentInfo"受影响的 class):

@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";
    // ...