我正在尝试使用 Spring 方面在使用MongoRepository
. 目标是这个接口:
@InSearch
public interface ItemRepository extends MongoRepository<Item, Long>,
ItemRepositoryCustom
{
List<Item> findAllByUsername( String username );
List<Item> findAllBySessionId( Long sessionId );
}
当我使用这个切入点时:
@Pointcut( "execution(* save(..)) && " +
"target(org.springframework.data.mongodb.repository.MongoRepository)" )
private void saveEntity()
{}
此方法在open
调用方法之前运行正常:
@Before( "saveEntity() && args(entity)" )
public void beforeSavingEntity( JoinPoint jp, AuditedBean entity )
{ ... }
但我希望它只在带有注释的接口上运行,@InSearch
所以我尝试以这种方式定义切入点:
@Pointcut( "execution(* save(..)) && " +
"target(org.springframework.data.mongodb.repository.MongoRepository) && " +
"@target(xx.annotations.InSearch)" )
private void saveEntity()
{}
注释定义:
@Target( { ElementType.TYPE} )
@Retention(RetentionPolicy.RUNTIME)
public @interface InSearch
{}
使用此切入点,beforeSavingEntity
不会调用该方法。我在日志上没有任何错误。我不确定我是否理解了@target
关于@within
. 我也试过了@within
,也没有用。
我必须如何定义这个切入点以在实现扩展并用注释save
的接口的类中选择方法执行?MongoRepository
@InSearch
谢谢!