使用Spring AOP调用自定义注释

时间:2014-09-28 09:25:18

标签: spring annotations aspectj spring-aop

我在网上搜索了一个关于如何使用Spring AOP调用我的自定义方法注释但没有找到明确示例的明确示例。

我正在构建一个框架,以便在调用任何POJO上的某些方法时在上下文中注入用户配置文件。

应该通过自定义方法注释调用框架API,比如@RunAsAdmin。我可以构建注释部分和解析器,我的问题是在调用带注释的方法时调用解析器的最佳方法是什么。

我们正在使用Spring 3.0,并且想知道配置Spring框架以理解那些使用特定注释注释的方法并调用我的注释处理程序(解析器)的最佳实践。

任何示例或指导都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

拦截对任何带注释的Spring bean方法的调用很简单,请参阅下面的示例。
根据定义,无法拦截对POJO的调用 - 您必须返回代理。
也就是说,您应该为这些POJO实现一个工厂,它将返回代理而不是真正的POJO。您可以使用ProxyFactoryBean http://docs.spring.io/autorepo/docs/spring-framework/3.2.0.BUILD-SNAPSHOT/api/org/springframework/aop/framework/ProxyFactoryBean.html

//intercepting a call to any method annotated with @com.yours.RunAsAdmin of any Spring-managed bean
@Component @Aspect class RunAsAdminAspect {
    @Autowired 
    private YourRunAsAdminHandler handler;

    @Before("@annotation(com.yours.RunAsAdmin)")
    public void doRunAsAdmin() {
        handler.grantAdminRightsToCurrentUser(); //your real stuff
    } 
}