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

  • 相关阅读:
    遇到缺陷错误时,有耐心,冷静思考,保证大方向是正确的
    学习新芯片和做新的工作内容时 DEMO
    599密码
    shop--7.店铺编辑和列表--店铺管理 前端
    shop--7.店铺编辑和列表--店铺列表展示 前端
    shop--7.店铺编辑和列表--店铺列表 分页查询,模糊查询--service层,controller层实现
    shop--7.店铺编辑和列表--店铺列表 分页查询,模糊查询--dao层实现
    shop--7.店铺编辑和列表--更新店铺的信息 前端实现 js
    shop--7.店铺编辑和列表--更新店铺的信息,包括对店铺照片的处理,根据shopId获取shop信息
    shop--7.店铺编辑和列表--联合查询的结果集封装ResultMap association collection
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/6254000.html
Copyright © 2011-2022 走看看