如何在 AspectJ 中提供动态切入点?

How to provide dynamic pointcut in AspectJ?

我正在尝试构建一个自定义性能测量库,用户可以使用它来测量应用程序中任何方法的性能。我的目标是在不改变用户应用程序现有 Java 代码的情况下实现这件事。

库将使用 MethodInterceptor 实现作为衡量性能的建议。 用户的唯一输入将是 his/her 选择的切入点表达式,没有别的。并使用提供的切入点表达式,我的库将能够拦截匹配的方法调用以衡量性能。

简而言之,用户只会在 spring xml:

中进行如下配置
<bean id="configBean" class="com.something.PointCutConfigBean">
    <property name="patterns">
        <list>
            <value>"execution(* com.company.CustomerDao.addCustomer(..))"</value>
        </list>
    </property>
</bean>

我的问题是如何在我的图书馆中实现这一点?如何实现 PointCutConfigBean class?我可以使用 spring 2 和 aspectj.

我知道,如果用户只是写一个普通的 <aop:config 并使用我的建议,同样的事情也可以实现。但如果可能的话,我只是在寻找更酷的东西。

这是个好问题!

你为什么不创建一个注解,如果需要的话,用于标记方法或字段,并编写一个可以获得注解的切面。 Class.getAnnotations(),如果您的注释存在,您 运行 您的代码 ?

在审查了可能的方法之后,我认为@M.Deinum 的评论对我的决定最有价值。最后,我决定只使用 <aop:advisor advice-ref="..." pointcut="execution(.. 路线。

如果大家有其他看法,欢迎分享。