Spring 为什么带有@target的已定义切入点不';不行?
我正在尝试使用Spring特性保存传统数据,同时使用Spring 为什么带有@target的已定义切入点不';不行?,spring,annotations,spring-annotations,aspects,Spring,Annotations,Spring Annotations,Aspects,我正在尝试使用Spring特性保存传统数据,同时使用MongoRepository存储文档。目标是此接口: @InSearch public interface ItemRepository extends MongoRepository<Item, Long>, ItemRepositoryCustom { List<Item> findAllByUsername( String username ); List<Item> fi
MongoRepository
存储文档。目标是此接口:
@InSearch
public interface ItemRepository extends MongoRepository<Item, Long>,
ItemRepositoryCustom
{
List<Item> findAllByUsername( String username );
List<Item> findAllBySessionId( Long sessionId );
}
调用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
的文档,以及他与@之间的差异。我也尝试过在
中使用,但也不起作用
我必须如何定义此切入点以选择类中的save
方法执行,该类实现了扩展MongoRepository
并用@InSearch
注释的接口
谢谢大家! 我认为您正在应用程序中使用基于类的代理
由于Java中的实现类没有继承注释,请尝试将@InSearch
放在实现类上
请参见我认为您在应用程序中使用的是基于类的代理
由于Java中的实现类没有继承注释,请尝试将@InSearch
放在实现类上
请参见您确定私人访问修饰符吗?不过,我记不清:)您的@InSearch
是否也保留在运行时?是的,我确定。是的,我将添加
@InSearh`definition实现类是由基于接口定义的“Spring Document-MongoDB”动态创建的。我想我必须创建一个新的界面来使用target
而不是@target
。你确定要使用私有访问修饰符吗?不过,我记不清:)您的@InSearch
是否也保留在运行时?是的,我确定。是的,我将添加@InSearh`definition实现类是由基于接口定义的“Spring Document-MongoDB”动态创建的。我想我必须创建一个新的接口来使用target
而不是@target
。正如我所说,实现类是由基于接口定义的“Spring Document-MongoDB”创建的。注释类不是一个选项。正如我所说的,实现类是由基于接口定义的“SpringDocument-MongoDB”创建的。注释类不是一个选项。
@Target( { ElementType.TYPE} )
@Retention(RetentionPolicy.RUNTIME)
public @interface InSearch
{}