我们可以禁用AOP调用吗?

时间:2012-07-26 17:15:04

标签: java log4j aop aspectj spring-aop

我有基于AOP的登录功能,并具有以下设置

Context xml配置:

<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调用? 我可以非常轻松地禁用日志记录,但是我可以禁用/启用整个后台进程和调用吗?

如果需要澄清,请告知。

2 个答案:

答案 0 :(得分:3)

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

定义个人资料enableAOP: 将aop:config包装在特定配置文件下的配置文件中

<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个人资料。

答案 1 :(得分:2)

自问这个问题以来已经有一段时间了,但这是我为Spring 2提出的:

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

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

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

这将查找名为AOP_CONTEXT_SUFFIX的系统变量,如果未找到,则将值强制为off

因此,在上面的示例中,通过将AOP_CONTEXT_SUFFIX设置为enabled,它将加载aop-context-enabled.xml

因此,交换机是系统变量,您可以在服务器启动时轻松启用/禁用它。