我们如何在java中配置基于注释的spring方面

时间:2012-11-29 11:41:10

标签: java spring aspect

我们如何在java中配置基于注释的spring方面?

让我们说我们想拦截一个spring服务,我们通常是通过AOP切入点表达式来实现的。此示例详细说明了如何使用注释而不是表达式来完成此操作。当我们使用注释时,这更具可移植性。

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

这是一个已解决的问题。我发布了我的答案,所以它可以帮助包括我在内的其他人。

1 个答案:

答案 0 :(得分:0)

春季基于注释的AOP建议

1.define annotation

 public @interface ApplyAuthorisationAdvice {
 }

如果未在

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

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) {
   }
}