如何在接口方法上创建从“超级”扩展的方面界面

发布于 2024-10-16 17:01:01 字数 613 浏览 5 评论 0原文

我有一个从基本接口扩展的服务层接口;我想围绕我的服务层接口创建一个切入点,但在基本接口中定义的方法之一上。

例如......我的基本接口中有一个名为“save()”的方法,我将其放入我的基本接口中,因为我的所有“子”接口都会提供“保存”功能。

我想仅在我的“子”界面之一上创建一个切入点,以便在调用“保存”时使用。

我创建了如下切入点:

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.save(..))")  
public void childServiceSavePointCut();

然后,我围绕上述切入点创建了一个 @Around 建议,如下所示:

@Around("childServiceSavePointCut()")
public void doMyAdvice()....

其中“ChildServiceInterface”扩展了另一个定义了“save()”方法的接口。

我的建议从未运行...我调试了代码,但在目标服务的顾问列表中没有看到我的建议。

我是否认为这会起作用,或者我是否错误地实施了它?

I have a service-layer Interface that extends from a base Interface; I would like to create a Pointcut around my service-layer Interface, but on one of the methods defined in the base Interface.

For instance.... I have a method in my base Interface called "save()", I put it in my base Interface since just all of my "child" Interfaces will provide "save" functionality.

I would like to create a PointCut on only one of my "child" interfaces for when my "save" gets called.

I created the pointcut like the following:

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.save(..))")  
public void childServiceSavePointCut();

I then created a @Around advice around the above pointcut like the following:

@Around("childServiceSavePointCut()")
public void doMyAdvice()....

where "ChildServiceInterface" extends another Interface which has the "save()" method defined.

My Advice never runs... I debugged my code and do not see my Advice in the list of Advisors for my target service.

Am I way off base thinking this will work, or am I implementing it incorrectly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鹿童谣 2024-10-23 17:01:01

试试这个切入点。

within(com.xyz.someapp.ChildServiceInterface+) && execution(* save(..))

+ 表示 子类型模式

Try this pointcut instead.

within(com.xyz.someapp.ChildServiceInterface+) && execution(* save(..))

The + indicates a subtype pattern.

眉目亦如画i 2024-10-23 17:01:01

将切入点放在该类的所有方法上。

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.*(..))")  
public void childServiceSavePointCut();

或者,您可以使用* 指示所有方法类型,

Or you can put pointcut on all the methods of that class using

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.*(..))")  
public void childServiceSavePointCut();

The * indicates all method type.

放低过去 2024-10-23 17:01:01

这对我有帮助:

    @Pointcut(
        "@within(com.xyz.someapp.ChildServiceInterface) && execution(* save(..))"
    )

This one helps me:

    @Pointcut(
        "@within(com.xyz.someapp.ChildServiceInterface) && execution(* save(..))"
    )

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文