`
wongkasteve
  • 浏览: 4901 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

AOP 方法参数传递总结

阅读更多
目标bean,showValues(String value)方法执行作为连接点
Java代码
public class InitializingBeanNameClass  
   public String showValues(String value)   
   {  
        System.out.println("目标方法执行:");  
        System.out.println("传入参数:String arg: " + value);  
        return value;  
   }  


public class InitializingBeanNameClass
   public String showValues(String value)
   {
    System.out.println("目标方法执行:");
    System.out.println("传入参数:String arg: " + value);
    return value;
   }
}


切面,bindMethodArgTest(String argvalue)方法作为通知
Java代码
public class BindArgs {  
   public void bindMethodArgTest(String argvalue) {  
    System.out.println("BindMethodArgTest通知,通过args(argvalue,..)绑定showValues(java.lang.String,..)第一个参数......");  
    System.out.println("参数:" + argvalue);  
   }  


public class BindArgs {
   public void bindMethodArgTest(String argvalue) {
System.out.println("BindMethodArgTest通知,通过args(argvalue,..)绑定showValues(java.lang.String,..)第一个参数......");
System.out.println("参数:" + argvalue);
   }
}


Java代码
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="  
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">  
 
<aop:aspectj-autoproxy/>  
 
  <aop:config>  
     <aop:aspect  id="bindArgs" ref="bindArgsAspectBean">  
        <aop:before  method="bindMethodArgTest" arg-names="argvalue" pointcut="execution( * com.spring.ch4.*.showValues(..)) and args(argvalue)" />   
     </aop:aspect>  
  </aop:config>  
    
  <bean id="nameBean" class="com.spring.ch4.InitializingBeanNameClass">  
        <property name="firstName" value="shen"/>  
  </bean>  
    
  <bean id="bindArgsAspectBean" class="com.spring.ch4.pointcut.xml.BindArgs" />  
    
</beans> 

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

<aop:aspectj-autoproxy/>

  <aop:config>
     <aop:aspect  id="bindArgs" ref="bindArgsAspectBean">
        <aop:before  method="bindMethodArgTest" arg-names="argvalue" pointcut="execution( * com.spring.ch4.*.showValues(..)) and args(argvalue)" />
     </aop:aspect>
  </aop:config>
 
  <bean id="nameBean" class="com.spring.ch4.InitializingBeanNameClass">
        <property name="firstName" value="shen"/>
  </bean>
 
  <bean id="bindArgsAspectBean" class="com.spring.ch4.pointcut.xml.BindArgs" />
 
</beans>


public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("com/spring/ch4/pointcut/xml/pointcut-tests.xml");

InitializingBeanNameClass nameBean = (InitializingBeanNameClass) context.getBean("nameBean");

System.out.println("=== GOING TO testBeforeAdvice ===");

nameBean.showValues("方法参数绑定");

System.out.println("=== FINISHED  testBeforeAdvice ===");
}

执行结果

=== GOING TO testBeforeAdvice ===
BindMethodArgTest通知,通过args(argvalue,..)绑定showValues(java.lang.String,..)第一个参数......
参数:方法参数绑定

目标方法执行:
传入参数:String arg: 方法参数绑定
=== FINISHED  testBeforeAdvice ===

这是我从java eye 提问模块中发现的。
[size=xx-small]回答者是:whistler [/size]
分享到:
评论

相关推荐

    AOP修改方法的参数

    ### AOP 修改方法的参数 #### 一、概念解析 AOP(面向切面编程)是一种编程技术,用于处理横切关注点问题。在软件开发过程中,常常有一些贯穿多个业务逻辑的功能需求,如日志记录、性能统计、安全控制、异常处理等...

    aop+exception的测试代码

    总结一下,"aop+exception"的测试代码主要涉及Spring AOP中的异常处理,可能涵盖了定义切面、通知、事务管理和单元测试等方面。通过合理利用AOP,我们可以编写更加整洁、可维护的代码,同时确保在异常情况下有适当的...

    Spring AOP的简单实现

    在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...

    common_加入缓存AOP,树结构路径参数填充_.zip

    总结来说,"common_加入缓存AOP,树结构路径参数填充"这个主题涵盖了解决性能优化和复杂数据结构处理的关键技术。通过结合缓存AOP和树结构路径参数的处理,开发者可以构建出更高效、更易维护的系统。同时,对相关...

    ioc AOP深入了解

    - **构造器注入(Constructor Injection)**:通过构造函数参数来注入依赖。 **依赖注入的优点**: - **减少耦合**:依赖关系由容器管理,而不是硬编码在类中。 - **易于测试**:可以通过构造函数或setter方法注入...

    详解使用Java原生代理实现AOP实例共4页.pdf.zi

    - 然后,使用`Proxy.newProxyInstance()`创建`Service`接口的代理对象,将`LoggingInvocationHandler`实例作为参数传递。 - 最后,我们可以通过代理对象调用`Service`接口的方法,代理会自动处理日志记录。 5. **...

    springAOP代理讲解

    在`main`方法中,通过`Proxy.newProxyInstance`创建了一个`Dao`接口的代理实例,并将其作为参数传递给`invoke`方法,这样就可以在调用实际方法前后添加事务管理等逻辑。 #### 六、总结 通过对比静态代理和动态代理...

    java中动态代理,springAop.pdf

    这通过`Proxy.newProxyInstance()`方法实现,该方法需要三个参数:类加载器、接口数组和`InvocationHandler`实例。 `invoke()`方法是核心部分,当代理对象的方法被调用时,实际执行的是`invoke()`方法。在`invoke()...

    java-用Java动态代理实现AOP.pdf

    `delegate` 是目标对象的引用,`proxy` 是代理对象,`method` 是被调用的方法,`args` 是传递给方法的参数。 创建代理对象的过程如下: ```java BusinessInterface business = new BusinessObject(); ...

    拦截器、过滤器、参数读取坑记录

    参数读取则是从客户端传递到服务器的数据获取过程,有时会遇到一些坑点,需要特别注意。下面将详细探讨这三个主题。 ### 1. 拦截器 拦截器主要用于AOP(面向切面编程)场景,常见于Spring MVC框架中。拦截器的执行...

    代理模式,JDK动态代理,SpringAOP来龙去脉

    - 自定义InvocationHandler实现时,需要将原始目标对象传递给handler,以便在invoke方法中调用目标对象的方法。 3. **Spring AOP(面向切面编程)**: - Spring AOP是基于代理模式实现的,提供了更高级别的抽象,...

    SpringMVC 学习总结

    3. @RequestParam 注解:通过在方法参数前添加 @RequestParam,可以指定参数名,即使与方法参数名不同。 4. @PathVariable:用于处理 RESTful 风格的 URL 中的占位符,例如 /users/{userId}。 5. 请求头参数:使用 @...

    SpringBoot+mybatis+Druid 运行时动态多数据源

    1. **配置抽象数据源**:创建一个继承自`AbstractRoutingDataSource`的类,重写`determineCurrentLookupKey()`方法,该方法会根据当前环境(比如用户请求、系统配置等)返回选择的数据源key。 2. **定义数据源工厂*...

    16 - MethodVisitor生成构造方法 - 简书1

    对于构造方法,我们传入`ACC_PUBLIC`访问标志,表示公共构造方法,`"&lt;init&gt;"`作为方法名,`"()V"`作为描述符,表示无参数的构造方法,最后两个参数可以留空,表示没有异常表。 3. **创建MethodVisitor实例**:`...

    struts2总结项目总结

    Action是业务逻辑处理单元,Result负责展示结果视图,Interceptor则作为拦截器,可以实现AOP(面向切面编程)功能。 3. OGNL(Object-Graph Navigation Language):用于在Action与JSP页面之间传递数据,提供强大的...

    Spring 设计模式总结1

    10. **责任链模式**:Spring的异常处理和AOP通知的执行流程体现了责任链模式,多个处理器形成一条链,每个处理器都有机会处理请求,直到请求被处理或传递给下一个处理器。 这些设计模式在Spring中扮演着关键角色,...

    最新JAVA面试题总结之框架.docx

    ### 最新JAVA面试题总结之框架 #### Spring框架概述与核心功能 **Spring框架**是一个广泛使用的开源框架,旨在简化企业级应用的开发过程。它采用了一种分层架构,这意味着开发者可以根据具体需求选择框架中的特定...

    SpringBoot多数据源配置(方式四:根据前端传递的数据库连接参数动态切换数据源).docx

    ### SpringBoot多数据源配置(方式四:根据前端传递的数据库连接参数动态切换数据源) #### 一、多数据源背景及应用场景 在SpringBoot应用开发中,大多数情况下只需要配置一个数据源信息来满足基本需求。然而,在...

Global site tag (gtag.js) - Google Analytics