2

使用 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){
            ...
    }
}

豆配置:

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

这可行,但我想完全停用它以避免执行方面,然后它就不需要了。

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

任何想法?提前致谢!

4

2 回答 2

0

you could create two aop.xml files... one normal and one for profiling. choose the profiling one with this argument:

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

or you could check in the aspect, if it should do any work... but i would not do it that way...

于 2013-01-04T11:10:11.910 回答
0

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

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

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

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

3) 创建一个 bean 类,它将根据属性返回所需的 Aspect

@Bean
public AbstractAspectClass abstractAspectClass() {

    return enabeAspect ? new EnableAspectClass() : new DisableAspectClass();
}
于 2014-06-19T09:49:23.520 回答