当前位置: 首页 > 知识库问答 >
问题:

接口上的Aspectj Spring切入点不工作

惠洛华
2023-03-14

在Spring中将一个方面配置为:

@Configuration
@EnableAspectJAutoProxy
@EnableTransactionManagement
public class TestConfiguration {

    @Bean
    public TransactionAspect transactionAspect(){
        return new TransactionAspect();
    }

交易观察是:

@Aspect
class TransactionAspect extends TransactionSynchronizationAdapter
{
private final Logger logger = LoggerFactory.getLogger(TransactionAspect.class);

@Before("@annotation(org.springframework.transaction.annotation.Transactional)")
public void registerTransactionSyncrhonization()
{
    TransactionSynchronizationManager.registerSynchronization(this);
}

@Override
public void afterCommit()
{
    logger.info("After commit!");
}

}

如果我使用@Transactional注释实现方法,TransactionAspect正在按预期工作。但是如果注释在接口上,它就不起作用。这是正常行为还是我做错了什么?

共有2个答案

甘英光
2023-03-14

要使这项工作,您需要在基于java的配置中添加代理目标类=真,例如@EnableAspectJAutoProxy(代理目标类=true)

邴英毅
2023-03-14

方法上的注释不会被Java中的子类或实现类继承。这可以解释为什么它不起作用。您的期望可能是实现方法从其接口继承注释,但事实并非如此。

更新:由于我之前已经多次回答了这个问题,所以我刚刚记录了这个问题,以及使用AspectJ模拟接口和方法的注释继承中的解决方法。

 类似资料:
  • 问题内容: 我正在使用Spring框架(2.5)及其AOP功能。我有一个切入点表达,例如 凡ItemReader接口是一个Spring接口,它的签名是: 该接口有一个名为“ read”的方法,我要对其应用此建议:方法签名为: 但是,当我使用上述切入点表达式运行应用程序时,出现以下异常: java.lang.IllegalArgumentException:警告与此类型名称不匹配:org.sprin

  • 下面是我的代码片段: 服务我mpl.java 现在,我想要的是每当从方法worker(请求,字符串id)抛出null点异常时,我想要执行一些特定的任务,如上图所示。为此,我编写了一个方面类,如下所示: 我的方面。Java语言 电流输出: 期望输出: 如您所见,没有被触发,因此没有打印值。这是什么原因? 注: > 还尝试更改方法的名称,以消除任何也不起作用的重载问题。 到目前为止,尝试了各种其他切入

  • 问题内容: 我有一个在Java 6 / Spring 3中实现的服务类,该服务类需要注释以按角色限制访问。 我定义了一个名为RequiredPermission的注释,该注释具有一个名为OperationType的枚举中的一个或多个值作为其value属性: 我还具有以下方面定义: 参数对象包含一个用户名,在允许访问该方法之前,我想为用户查找所需的角色。 当我将注释放在MyServiceImpl中的

  • 我想拦截所有java。sql。数据源。getConnection方法使用aspectj时,我使用了以下切入点: 它工作得很好。但我遇到了一些类,例如org。阿帕奇。公猫jdbc。水塘在该切入点不起作用的类层次结构中实现的数据源,其中数据源方法位于不实现数据源的层次结构中的类中,只有最顶层的类实现数据源: BaseDataSource不实现DataSource,但具有所有DataSource方法实现

  • 我试图拦截一个用JAX-RS@POST标注的接口方法。我的切入点适用于所有非接口方法,如果@POST-注释直接位于被调用的方法。 拦截的接口方法: 要匹配方法的PointCut: 接口在v1com.myapp.social.webapi.包中,即使我将方法更改为公共AeyJ也不会拦截调用。 在我的切入点内有什么需要改变的吗?我怎样才能让它工作?

  • RESTEasy代码的一部分。 这是因为“Spring AOP不能通知实现模板接口的pointcut类”吗?有什么想法吗?Spring AOP如何为实现参数化接口的类创建代理对象?...它使用CGLIB还是JDK代理?