如何使用Spring AOP在类上创建一个不是bean的切面?

7
我在一份遗留的应用程序上工作,其中使用了Spring AOP(即ProxyFactoryBean)。
我需要在某个类的方法周围添加一个方面。但是,这个类不是一个bean。 AspecjJ切入点表达式如下: execution(* xyz.package.Class.method()) 我创建了一个MethodInterceptorAspectJExpressionPointcut,但我不知道如何让这两者配合起来使用。
编辑: 我没有这个类的源代码,它是一个第三方库。我不会在源代码中或者spring配置文件中创建这个类的实例,也不会将其设置为bean。它是被库内部使用的。
任何帮助都将不胜感激。

1
你能不能把这个类放在一个bean里面? - skaffman
1
我有一个连接池,这是一个bean,它的所有内部对象都在此bean中创建(没有setter)。我想创建一个日志切面,记录从数据库获取连接所需的时间。这是其中一个内部对象的方法。 - Ula Krukar
那么目前,你如何获取对此类(实例)的引用?无论如何,我认为使用AspectJ和一些AroundAdvice,您将能够对此应用程序进行一些分析。Spring不是使用AspectJ所必需的。 - Hans Westerbeek
2个回答

4
您可以使用加载时织入(Load-time weaving),并像这里所描述的那样,使用完整的AspectJ支持。它不需要访问被建议类的源代码,也不需要对其实例化进行控制(尽管需要<context:load-time-weaver />以及使用-javaagent:...其他方法来保证编织器本身的存在)。

3
尝试使用@Configurable。这在此文档中有解释。
@Configurable注释标记一个类适合由Spring驱动的配置(需要)。
更新: 您可以通过在applicationContext.xml中将第三方组件列为来使其成为bean(不需要@Configurable)。

我没有这个类的源代码,它是第三方库。 - Ula Krukar
那为什么不把它添加到applicationContext.xml中呢?(请看我的更新) - Bozho
好的,但是我该如何在创建的bean上添加@Configurable呢? - Ula Krukar
使用此选项时,您不需要@Configurable - 该类已经是一个bean。 - Bozho
我更新了问题并提供了更多细节。遗憾的是,我认为这种方法对我没有帮助。 - Ula Krukar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接