zoukankan      html  css  js  c++  java
  • 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中可以取得。

  • 相关阅读:
    css3360度旋转动画
    PAT 1084 外观数列(20)(代码+思路+推荐测试用例)
    PAT 1083 是否存在相等的差(20)(代码+思路)
    PAT 1082 射击比赛(20)(代码+思路)
    PAT 1079 延迟的回文数(代码+思路)
    PAT 1078 字符串压缩与解压(20)(代码+思路)
    PAT 1077 互评成绩计算(20)(代码+思路)
    PAT 1073 多选题常见计分法(20)(代码+思路)
    PAT 1072 开学寄语(20)(代码+思路)
    PAT 1069 微博转发抽奖(20)(代码+思路+测试点4)
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/6254000.html
Copyright © 2011-2022 走看看