spring aop 利用JoinPoint獲取參數的值和方法名稱


AspectJ使用org.aspectj.lang.JoinPoint接口表示目標類連接點對象,如果是環繞增強時,使用org.aspectj.lang.ProceedingJoinPoint表示連接點對象,該類是JoinPoint的子接口。任何一個增強方法都可以通過將第一個入參聲明為JoinPoint訪問到連接點上下文的信息。我們先來了解一下這兩個接口的主要方法: 
1)JoinPoint 
 java.lang.Object[] getArgs():獲取連接點方法運行時的入參列表; 
 Signature getSignature() :獲取連接點的方法簽名對象; 
 java.lang.Object getTarget() :獲取連接點所在的目標對象; 
 java.lang.Object getThis() :獲取代理對象本身; 
2)ProceedingJoinPoint 
ProceedingJoinPoint繼承JoinPoint子接口,它新增了兩個用於執行連接點方法的方法: 
 java.lang.Object proceed() throws java.lang.Throwable:通過反射執行目標對象的連接點處的方法; 

Java.lang.Object proceed(java.lang.Object[] args) throws java.lang.Throwable:通過反射執行目標對象連接點處的方法,不過使用新的入參替換原來的入參。 


 

一、概述
      AOP的實現方法在上兩篇博客中已經用了兩種方法來實現現在的問題來了雖然我們利用AOP,那么客戶端如何信息傳遞?利用JoinPoint接口來實現客戶端給具體實現類的傳遞參數。
二、代碼演示。

目錄結構:


SecurityHandler.java

 

 
 
package import public SecurityHandler{  
  •   checkSecurity(JoinPoint joinPoint){  
  •          ( i = ; i < joinPoint.getArgs().length; i++) {  
  • );  
  •   
  • }  


 

Client.java

 

 
 
package import import import public Client {  
  •    main(String[] args) {  
  •  ClassPathXmlApplicationContext();  
  •         UserManager userManager=(UserManager) factory.getBean();  
  • );  
  •           
  • }  


 

UserManager.java

 

 
 
package public UserManager {  
  •       
  •   addUser(String username,String password);  
  •       
  •   delUser( userId);  
  •       
  •  String findUserById( userId);  
  •       
  •   modifyUser( userId,String username,String password);  
  •       
  • }  


 

UserManagerImpl.java

 

 
 
package public UserManagerImpl  UserManager {  
  •   
  •   addUser(String username, String password) {  
  •           
  • );  
  •   
  •   delUser( userId) {  
  •           
  • );  
  •   
  •  String findUserById( userId) {  
  •           
  • );  
  •       ;  
  •   modifyUser( userId, String username, String password) {  
  •           
  • );  
  •   
  • //  private void checkSecurity(){ //      System.out.println("checkSecurity"); // //  } }  


 

applicationContext.xml

 

 
 
<? = =?> < =  
  • =  
  •          =  
  • =  
  •          ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  •   
  • < = =   
  •  = =/> <>  = =>  = =  
  •  = =   
  •     > </> </>  


 

效果圖:


三、總結。

我們可以通過Advice中添加一個JoinPoint參數,這個值會由spring自動傳入,從JoinPoint中可以取得。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM