使用配置文件的条件方面

时间:2013-01-04 10:59:00

标签: java spring aspectj

使用Spring 3.2和AspectJ 1.6,我已经使用AspectJ实现了一个分析方面,以获得我的应用程序的性能指标。

它正在运作,但现在我需要这个方面的执行是有条件的。我的意思是,这个分析只有几次有用,所以我想在不需要时关闭它。

我做的第一个方法是添加一个由spring注入方面的新属性。然后,此属性用于使执行成为条件。像这样:

方面:

...
private boolean active;
@Pointcut("execution(public * *(..))")
    public void anyPublicOperation() {
}
@Around("anyPublicOperation()")
public Object profile(final ProceedingJoinPoint pjp)
    throws Throwable {
if (active){
            ...
    }
}

Bean配置:

<!-- Profiling aspect -->
<bean class="example.ProfilingAspect" factory-method="aspectOf">
    <property name="active" value="true"/>
</bean>

这有效,但我想完全取消它以避免执行方面然后不需要它。

但是,我找到的唯一解决方案是在'aop.xml'文件中注释该方面,但我更喜欢使用属性来激活/停用分析。

有什么想法吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

您可以创建两个aop.xml文件...一个正常,一个用于分析。选择具有以下参数的分析:

-Dorg.aspectj.weaver.loadtime.configuration=META-INF/aop-profiling.xml

或者你可以查看方面,如果它应该做任何工作......但我不这样做...

答案 1 :(得分:0)

这可以通过以下方式实现:

  1. 在属性文件中声明一个属性,该属性指示是应启用还是禁用方面。 例如:enableAspect =true
  2. 创建两个扩展抽象类的方面类:

                AbstractAspectClass (contains blank implementation of advices)
                       /     \
                      /        \
                     /           \
        EnableAspectClass           DisableAspectClass 
    

    (包含所有必需的建议(不包含任何方法) 实施)

  3. 3)创建一个bean类,它将根据属性

    返回所需的Aspect
    @Bean
    public AbstractAspectClass abstractAspectClass() {
    
        return enabeAspect ? new EnableAspectClass() : new DisableAspectClass();
    }