2014-09-28 28 views
1

我在網上搜索了一個關於如何使用Spring AOP調用自定義方法註釋但無法找到明確示例的清晰示例。使用Spring AOP調用自定義註釋

我正在構建一個框架,以在任何POJO上的某些方法被調用時在上下文中注入用戶配置文件。

框架API應該通過自定義方法註釋來調用,比如@RunAsAdmin。我可以構建註釋部分和解析器,我的問題是調用註解方法時調用解析器的最佳方式是什麼。

我們正在使用Spring 3.0,並希望知道什麼是配置Spring框架以理解那些使用特定註釋進行註釋並調用我的註釋處理程序(解析器)的方法的最佳實踐。

任何示例或指導將受到高度讚賞。

回答

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 
    } 
} 
+0

感謝Alex,將使用您的示例與Spring託管bean一起使用。什麼應該進入我的Spring上下文配置?這是我需要添加的所有內容:'' – DhafirNz 2014-09-28 18:24:12

+0

在doRunAsAdmin方法中,是否可以獲取將要調用哪個方法的句柄? – DhafirNz 2014-09-28 18:43:32

+1

你只需要像public void doRunAsAdmin(JoinPoint joinpoint)這樣的方法來改變方法,你就可以像MethodSignature signature =(MethodSignature)joinPoint.getSignature()那樣獲得被調用的方法。 Method method = signature.getMethod(); – varun 2014-09-29 07:50:05