-2

我们如何在java中配置基于注解的spring aspect?

假设我们要拦截一个spring服务,我们通常通过AOP切入点表达式来实现。这个例子详细说明了如何使用注释而不是表达式来做到这一点。当我们使用注释时,这更便携。

有很多例子,但很少有正确的内容。因此把它放在这里...

这是一个已解决的问题。我正在发布我的答案,以便对包括我自己在内的其他人有所帮助..

4

1 回答 1

0

Spring 中基于注解的 AOP 建议

1.定义注解

 public @interface ApplyAuthorisationAdvice {
 }

<aop:aspectj-autoproxy /> 如果之前没有完成,请在 spring 配置文件中设置

2.

import org.aopalliance.aop.Advice;
import org.aspectj.lang.annotation.Aspect;

@Aspect
@Component
public class AuthorisationAspect implements Advice {

    private final static Logger logger = Logger.getLogger(AuthorisationAspect.class);

    @Autowired
    MyService myService;

    @SuppressWarnings("unchecked")
    @AfterReturning(pointcut = "@annotation(com.example.ApplyAuthorisationAdvice)", returning = "result")
    public void afterReturning(JoinPoint joinPoint, Object result) {

        if (result != null && (result instanceof List)) {
            // filter stuff
        }

    }
}

3.对需要拦截的服务应用注解

@Component("myService")
public class MyServiceImpl implements MyService {
  @ApplyAuthorisationAdvice 
   public List<MySummary> search(MyContext searchContext) {
   }
}
于 2012-11-29T11:41:09.723 回答