我想为用存储库注解的类触发我的方面,这些类属于我的包,例如下面这个:
//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的SimpleJPARepository,就好像方面只处理实现,完全忽略了接口。
1条答案
按热度按时间pbpqsu0x1#
我觉得你不想
而是
注意你的切入点语法,这两个是不一样的:
within()
描述了一个包或类的名称,你想将切入点的范围/限制到它。@within()
查找具有给定注解的类型(类)。你想要后者,而不是前者。
**编辑:**再想想,实际上我看不出第一个版本不应该工作的明显原因,尽管它比第二个版本复杂一点。
但是你说你在第二个切入点上遇到了问题。你100%确定你的仓库类真的在
com.foo.myapp
(子)包里吗?包名和切入点都没有打字错误吗?实际上,不用尝试,只要看一下,它应该可以工作。