我需要在Spring(非引导)应用程序中的类上启用/禁用@Aspect。
春季版本为:4.1.6.RELEASE
我有一个属性为aspect.enabled=true|false
的.properties文件(我们已经在应用程序的其他位置成功使用了,例如,选择log4j2配置文件),我尝试使用@ConditionalOnExpression
注释以启用|禁用它。
这是我的尝试:
application.properties文件:
aspect.enabled=true
类代码:
@Configuration
@PropertySource(ignoreResourceNotFound = true, value = { "file:${catalina.home}/conf/application.properties" })
@ConditionalOnExpression("'${aspect.enabled}'=='true'")
@Aspect
@Component
public class TimingProfilerProduction {
@Value("${aspect.enabled}")
public String aspect;
使用此配置,表达式始终被评估为 false 。
我尝试放置一个“ true”以查看它是否可以这种简单方式工作:
@Configuration
@PropertySource(ignoreResourceNotFound = true, value = { "file:${catalina.home}/conf/application.properties" })
@ConditionalOnExpression("true")
@Aspect
@Component
public class TimingProfilerProduction {
@Value("${aspect.enabled}")
public String aspect;
当然可以通过这种方式将@ConditionalOnExpression评估为true,并且我还可以证明 aspect 类属性正确读取了 aspect.enabled 属性。
尝试#3
我尝试了 @ConditionalOnProperty :
@Configuration
@PropertySource(ignoreResourceNotFound = true, value = { "file:${catalina.home}/conf/application.properties" })
@ConditionalOnProperty(prefix="aspect", name="enabled", havingValue = "true")
但什么也没有,总是 false 。
尝试#4:
@ConditionalOnExpression("${aspect.enabled}")
或
@ConditionalOnExpression("!${aspect.enabled}")
给出错误:
Caused by: org.springframework.expression.spel.SpelParseException: EL1041E:(pos 1): After parsing a valid expression, there is still more data in the expression: 'lcurly({)'
尝试#5(使用默认值):
@ConditionalOnExpression("${aspect.enabled:true}")
总是给出 true (即使使用aspect.enabled=false
也是如此)
@ConditionalOnExpression("${aspect.enabled:false}")
总是给出 false
答案 0 :(得分:0)
代替:
@ConditionalOnExpression("'${aspect.enabled}' == 'true'")
尝试:
@ConditionalOnExpression("${aspect.enabled} == true")