Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 为什么带有@target的已定义切入点不';不行?_Spring_Annotations_Spring Annotations_Aspects - Fatal编程技术网

Spring 为什么带有@target的已定义切入点不';不行?

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

我正在尝试使用Spring特性保存传统数据,同时使用
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
{}