2012-07-26 98 views
3

我有以下设置我们可以禁用AOP调用吗?

上下文XML配置AOP基于洛功能:

<bean id="performanceMonitor" 
class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor" /> 

<aop:config> 
     <aop:pointcut id="allServiceMethods" 
      expression="execution(* com.eshop.sfweb.service.impl..*(..))" /> 
    <aop:pointcut id="allEpServices" 
      expression="execution(* com.service.catalog..*(..))" /> 
     <aop:advisor pointcut-ref="allServiceMethods" 
      advice-ref="performanceMonitor" order="2" /> 
     <aop:advisor pointcut-ref="allEpServices" 
      advice-ref="performanceMonitor" order="2" /> 
    </aop:config> 

Log4j属性:

log4j.logger.org.springframework.aop.interceptor.PerformanceMonitorIntercept 
or=${ep.perflog.level},PERFORMANCE 
log4j.appender.PERFORMANCE.File=webAppRoot:WEB-INF/log/performance.log 
log4j.appender.PERFORMANCE.threshold=DEBUG 
log4j.appender.PERFORMANCE=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.PERFORMANCE.DatePattern='.'yyyy-MM-dd 
log4j.appender.PERFORMANCE.layout=org.apache.log4j.PatternLayout 
log4j.appender.PERFORMANCE.layout.ConversionPattern=%d -- %-5p [%t | %F:%L] 
-- %m%n 

有没有办法,我可以禁用本身取决于AOP调用任何方式在环境? 我可以非常容易地禁用日志记录,但是可以禁用/启用整个后台进程和调用吗?

如果需要澄清,请留言。

回答

3

由于您使用的是Spring AOP,因此启用或禁用方面的一种快速方法可能是简单地使用Bean配置文件。

定义配置文件说enableAOP: 包裹AOP:配置中说配置文件中的特定配置

<beans profile="enableAOP"> 
    <aop:config> <aop:pointcut id="allServiceMethods" 
    expression="execution(* com.eshop.sfweb.service.impl..*(..))" /> 
    <aop:pointcut id="allEpServices" expression="execution(* 
    com.service.catalog..*(..))" /> 
.... 
</beans> 

现在,无论环境中,你要启用特定方面下,只是与enableAOP谱运行。

+0

我可以知道哪个版本的spring支持bean的这个配置文件属性?我在Spring 2.0中尝试过,但未能解析spring bean xml。 – sundar 2013-04-24 05:34:34

+0

对于那些想知道的,配置文件已被添加到春季3. – 2013-07-25 15:50:54

+0

优秀的答案。简洁,优雅和精确。 – Bevilaqua 2017-04-24 00:32:35

2

它已经有一段时间,因为这个问题被问,但这里是我想出了春2:

与空<beans>声明创建一个空的XML文件(aop-context-off.xml)。 然后用您的AOP声明创建例如aop-context-enabled.xml文件。

最后导入XML时,你可以使用:

<import resource="aop-context-${AOP_CONTEXT_SUFFIX:off}.xml" /> 

这将查找名为AOP_CONTEXT_SUFFIX系统变量,如果没有发现力值off

因此,在上面的例子中,通过设定AOP_CONTEXT_SUFFIXenabled它会加载aop-context-enabled.xml

所以开关作为系统变量,可以很容易地启用/在服务器启动禁用它。

相关问题