我们如何在java中配置基于注解的spring aspect?
假设我们要拦截一个spring服务,我们通常通过AOP切入点表达式来实现。这个例子详细说明了如何使用注释而不是表达式来做到这一点。当我们使用注释时,这更便携。
有很多例子,但很少有正确的内容。因此把它放在这里...
这是一个已解决的问题。我正在发布我的答案,以便对包括我自己在内的其他人有所帮助..
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) {
}
}