Spring存储库中的AspectJ Joinpoint

时间:2015-05-28 17:14:10

标签: spring spring-data aspectj spring-aspects

我试图拦截对Repository.save方法的调用。这基本上解释为HereHere。唯一的问题是它根本不起作用。我显然错过了一些东西,但是经过几个小时后,我不知所措。

我使用的是Spring 4.1.6和AspectJ 1.8.5。

代码:

我的配置类中的有趣注释:

@Configuration
@EnableWebMvc
@EnableAspectJAutoProxy
@EnableJpaRepositories(
   basePackageClasses=com.xxx.admin.repository.ComponentScan.class)
@ComponentScan(basePackageClasses=      
   {com.xxx.admin.domain.ComponentScan.class
    ,com.xxx.admin.model.ComponentScan.class
    ,com.xxx.admin.service.ComponentScan.class})
@EnableTransactionManagement
@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED )`

目标存储库:

@Repository
public interface UserRepository extends PagingAndSortingRepository<User, UserId> {

@Transactional(readOnly=true)
Page<User> findAll(Pageable pageable);

@SuppressWarnings("unchecked")
@Transactional
public User save(User user);
}

方面:

@Aspect
public class RepositorySaveAspect {

// Define the JoinPonit
//"org.springframework.data.repository.Repository+.*(..))")
//com.xxx.admin.repository.

//@Pointcut("execution(* com.xxxx.admin.repository.UserRepository.save(..))")
//@Pointcut("execution(* com.xxxx.admin.repository.*Repository+.*(..))")
//@Pointcut("execution(* org.springframework.data.repository.PagingAndSortingRepository+.*(..))")
@Pointcut("execution(public !void org.springframework.data.repository.CrudRepository+.*(..))")
public void repositorySavePoints() {
}

如您所见,我尝试了几种不同类型的切入点。但它们都不起作用。我怀疑我错过了与代理有关的事情。建议(双关语)赞赏。

0 个答案:

没有答案