如何从注释中获取Spring配置文件名称?

时间:2015-08-17 20:14:59

标签: java spring

使用Spring 3.1和配置文件,创建定义特定配置文件的自定义界面变得有趣。美的一部分是能够完全忘记配置文件的String名称并只使用注释。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile("Dev")
public @interface Dev {

}

然后简单地使用@Dev注释bean。这很有效。

但是,如何检查@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
        ;
    }

虽然功能齐全,但我并不特别喜欢这个概念。还有另外一种方法可以做这个整洁的工作吗?

1 个答案:

答案 0 :(得分:3)

我想做类似的事情(在我的情况下,代表一个配置文件注释下的同义词列表)但我遇到了你的问题,以及另一个限制:你将无法应用多个对单个bean的注释,并让它们都被spring(至少在spring 3中)拾取。

不幸的是,由于你无法传递枚举,我解决的解决方案是使用普通的字符串常量而不使用枚举。然后我可以做@Profile(CONSTANT_ONE, CONSTANT_TWO)之类的事情。我仍然无法进行拼写错误,但也获得了将多个配置文件应用于同一个bean的能力。

不完美,但也不是太糟糕。