使用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
;
}
虽然功能齐全,但我并不特别喜欢这个概念。还有另外一种方法可以做这个整洁的工作吗?
答案 0 :(得分:3)
我想做类似的事情(在我的情况下,代表一个配置文件注释下的同义词列表)但我遇到了你的问题,以及另一个限制:你将无法应用多个对单个bean的注释,并让它们都被spring
(至少在spring 3
中)拾取。
不幸的是,由于你无法传递枚举,我解决的解决方案是使用普通的字符串常量而不使用枚举。然后我可以做@Profile(CONSTANT_ONE, CONSTANT_TWO)
之类的事情。我仍然无法进行拼写错误,但也获得了将多个配置文件应用于同一个bean的能力。
不完美,但也不是太糟糕。