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

  • 相关阅读:
    Java高级特性 第11节 JUnit 3.x和JUnit 4.x测试框架
    Java高级特性 第10节 IDEA和Eclipse整合JUnit测试框架
    Java高级特性 第9节 Socket机制
    Java面向对象和高级特性 项目实战(一)
    Java高级特性 第8节 网络编程技术
    Java高级特性 第7节 多线程
    二十一、字符串类的创建
    二十二、经典问题解析二
    二十一、C++中的临时对象
    二十、对象的销毁
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/6254000.html
Copyright © 2011-2022 走看看