使用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'文件中注释该方面,但我更喜欢使用属性来激活/停用分析。
有什么想法吗?提前谢谢!
答案 0 :(得分:0)
您可以创建两个aop.xml文件...一个正常,一个用于分析。选择具有以下参数的分析:
-Dorg.aspectj.weaver.loadtime.configuration=META-INF/aop-profiling.xml
或者你可以查看方面,如果它应该做任何工作......但我不这样做...
答案 1 :(得分:0)
这可以通过以下方式实现:
enableAspect =true
创建两个扩展抽象类的方面类:
AbstractAspectClass (contains blank implementation of advices)
/ \
/ \
/ \
EnableAspectClass DisableAspectClass
(包含所有必需的建议(不包含任何方法) 实施)
3)创建一个bean类,它将根据属性
返回所需的Aspect@Bean
public AbstractAspectClass abstractAspectClass() {
return enabeAspect ? new EnableAspectClass() : new DisableAspectClass();
}