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

方面不会在我的应用程序中的存储库周围触发

马欣德
2023-03-14

我想为带有存储库注释并属于我的包的类触发我的方面,例如:

//com.foo.myapp.bar.repositories.dao
@Repository
public class MyRepo extends JpaRepository<MyEntity, String>{

我的类是这样创建的jpa存储库:

@EnableTransactionManagement
@EnableJpaRepositories(
    entityManagerFactoryRef = "firstManagerFactory",
    transactionManagerRef = "firstTransactionManager",
    basePackages = {"com.foo.myapp.bar.repositories.first.dao"}

)公共类DbConfig{

我的方面是以下内容,但仅在我离开repository()切入点时激活,但如果我还指定应用程序包,它就不起作用:

@Pointcut("within(@org.springframework.stereotype.Repository *)")
private void repositoryInvocation() {
    // Method is empty as this is just a Pointcut, the implementations are in the advices.
}

@Pointcut("within(com.foo.myapp..*)")
public void applicationPackage() {
    // Method is empty as this is just a Pointcut, the implementations are in the advices.
}

@Around("repositoryInvocation() && applicationPackage()") //this && doesn't work, I have to remove the second one
public Object aspectTriggers(ProceedingJoinPoint joinPoint) throws Throwable {
    Object result = joinPoint.proceed();
    return result;
}

我错过了什么?

编辑:

我想我明白了:问题是存储库的实现不属于我的应用程序包,而是属于spring的SimpleJPrepository。这就像aspect只处理实现,完全忽略了接口。

共有1个答案

柳杰
2023-03-14

我想你不想要

@Pointcut("within(@org.springframework.stereotype.Repository *)")

而是

@Pointcut("@within(org.springframework.stereotype.Repository)")

小心你的切入点语法,两者不一样:

  • within()描述了您想要对切入点进行范围/限制的包或类名
  • @within()查找具有给定注释的类型(类)

你想要后者,而不是前者。

编辑:再想一想,实际上我看不出第一个版本不起作用的明显原因,尽管它比第二个版本要复杂一点。

但是你说你对第二个切入点有问题。你百分之百确定你的repository类真的在一个com中吗。傅。myapp(子)包?包名或切入点没有输入错误?事实上,不需要尝试,只需要看一眼,否则它应该会起作用。

 类似资料:
  • 我对匕首比较陌生,我刚开始使用剑柄。我想要的是在中注入一个应用程序范围的存储库(这意味着它需要在任何地方都是相同的对象)。存储库将用于检索用户、auth令牌和诸如此类的东西。这是我能找到的最接近的: 这样一切都可以正常工作,使用debug我可以确认每次使用时都注入了相同的实例。问题是第二次调用时(例如,视图被销毁并重新创建)。我不知道我是在科特林一侧犯了什么愚蠢的错误,还是在剑柄一侧犯了什么愚蠢的

  • 我正在按照本指南将MySql添加到一个已经存在的SpringBoot项目中,该项目的依赖关系管理是在Graddle上。就在我添加教程中使用的这三个类时,如下所示 main/java/net/code/model/users.java 我的类使用@SpringBoot main/java/net/code/app.java 但每当我运行该应用程序时,我总是收到下面的消息 我搜索了一些相关问题,比如S

  • 我正在尝试构建一个使用java库“核心”(Android库。我遇到了问题,让我的依赖项显示在我生成的pom文件中,但我(认为我)使用这个问题的答案修复了它:Gradle不包括已发布的pom中的依赖项.xml 我现在正试图解决为什么将我的库导入到单独的应用程序中会产生此错误。这是我将库作为 gradle 依赖项导入到项目中时遇到的错误: 这是我的身材: 这将生成pom文件: 奇怪的是,如果我删除pl

  • 问题内容: 在运行在node.js / Express上的开源应用程序中存储数据库配置(用户名,密码)的最佳方法是什么?两个具体问题: 例如,我是否应该将其放入文件夹中的单独config.js文件中,并且永远不要将其包含在GitHub上公开可用的主存储库中? 要包括配置,它是否像需要它的文件一样简单,或者有更好的方法呢? PS很抱歉,如果问题看起来有点简单或表达方式不够完善,但我才刚刚开始:) 问

  • 我要确定一个在Azure表存储中存储日志信息的好策略。我有以下内容: PartitionKey:日志的名称。 ROWKEY:倒置的日期时间刻度, 这里唯一的问题是分区可能会变得非常大(数百万个实体),并且大小会随着时间的推移而增加。 但尽管如此,所执行的查询类型将始终包括(不扫描)和筛选器(小扫描)。 例如(在自然语言中): 如果查询同时在和上完成,那么我理解分区的大小并不重要。