java - 抽象类的 protected 方法的 Spring 切入点

标签 java spring aspectj spring-aop

我正在使用 Spring 3.2AspectJ 1.7.1。 (我不太可能在不久的将来升级到更高版本。)

我需要为抽象类中的 protected 方法定义一个切入点。 AFAIK 我需要 AspectJ 用于非公共(public)方法,所以我只尝试使用 (AspectJ) 注释:

package com.aspects;
@Aspect
public class Aspect{

    @Before("execution(* com.x.y.x.MyClass.myMethod(..))")
    public void beforeAspect(){
       //do something here
    }

}

在我的 beans.xml 中我有:

<aop:aspectj-autoproxy />
<bean id="myAspect" class="com.aspects.Aspect"/>

我已经检查并创建了我的 Aspect 类(正在调用构造函数),启动应用程序时没有抛出异常。 但是我无法调用 beforeAspect 。对于非抽象类中的公共(public)方法,这是可行的。我怎样才能让它适用于抽象类中的 protected 方法?

最佳答案

您应该在抽象类之后添加一个+ 符号。

所以

"execution(* com.x.y.x.MyClass.myMethod(..))" 

应该看起来像:

"execution(* com.x.y.x.MyClass+.myMethod(..))"
                              ↑

+ 是关于扩展给定类 (MyClass) 或实现接口(interface)的继承。

关于java - 抽象类的 protected 方法的 Spring 切入点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21002992/

相关文章:

java - robolectric 单元测试 android Timer

java - 在通过改造发送到服务器之前上传 Base64 格式的图像和压缩图像?

java - 是否可以将spring data jpa存储库注入(inject)到java持久实体中?

java - 调用周围 AspectJ 的特定返回类型

java - 如何让 Lombok 和 AspectJ 一起工作?

java - 如何使用 selenium WebDriver 查找文本字段的元素?

spring - Spring Cloud AWS如何从缓存集群的逻辑名称获取配置端点?

java - Spring Boot JPA如何实现用户和权限表之间的外键?

inner-classes - AspectJ内部类连接点

java - MySQL 没有正确存储一些 UTF8 字符