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中可以取得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值