【问题标题】:Spring introduction accessing original introduced classSpring引入访问原始引入类
【发布时间】:2014-07-28 09:29:47
【问题描述】:

我正在尝试使用 Spring 框架 AOP 来扩展一些类 AImpl(它实现接口 A),以便能够实现新的接口 B。

我正在使用 @DeclareParents 并实现 Aspect。不幸的是,我需要访问 A 的一些方法才能在其中实现业务逻辑。

有没有人知道比将 A 作为参数添加到接口 B 方法更好的解决方案?

是否有人成功地使用了 Spring AOP 介绍来以我需要的方式扩展类?我能够找到的所有示例都仅以“静态方式”扩展 A 类,而无需从 A 调用方法。

到目前为止,我只发现了 AopContext.currentProxy() 方法,我认为这是非常丑陋的 hack。

【问题讨论】:

    标签: java spring aop spring-aop


    【解决方案1】:

    恐怕你只有两种方法可以从 B 访问 A

    • AopContext.currentProxy() - 不是那么难看,但强迫你使用expose-proxy="true"
    • 通过 Spring 直接在 B 中注入 A - 还不错,两个都是单例

    我尝试对接口 B 的方法使用环绕建议,希望访问将实现这两​​个接口的原始代理。但是 Spring 将其替换为另一个代理,该代理仅实现 B 以获得正确的目标。

    实际上还有第三种方法,但恕我直言,这个真的很丑:接口 B 的所有方法都明确采用实现 A ... bof ... 的参数 :-(

    【讨论】:

    • 在我的情况下,通过 Spring 将 A 注入 B 的方式是最好的选择,因为我的业务逻辑可以重构为 Spring 单例类,所以我会选择它。 Expose-proxy="true" 是我认为 AopContex 方式丑陋的原因——它减慢了 AOP。谢谢:)
    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2016-08-13
    • 1970-01-01
    相关资源
    最近更新 更多