`

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;
}
}


切面,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);
}
}


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>


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 ===

分享到:
评论

相关推荐

    AOP修改方法的参数

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

    springaop+arg

    - `&lt;aop:args&gt;`:在XML配置中,可以使用`&lt;aop:args&gt;`元素来指定传递给通知的方法参数。 3. **处理AOP参数**: - 在通知方法中,可以使用`JoinPoint`对象来获取方法的参数信息,如`JoinPoint.getArgs()`方法可以...

    aop+exception的测试代码

    你可以指定一个`throwing`参数,该参数可以引用抛出的异常对象。 2. `@Around`: 这是最灵活的通知类型,允许你在方法调用前后完全控制流程。`@Around`通知可以捕获并处理异常,或者决定是否将异常传递给调用链。 ...

    Spring AOP的简单实现

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

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

    当我们谈论“common_加入缓存AOP,树结构路径参数填充”时,这涉及到两个主要概念:缓存AOP(面向切面编程)和树结构路径参数的处理。下面将详细解释这两个知识点。 首先,让我们来理解什么是缓存AOP。AOP(Aspect-...

    spring连接数据库aop-jdbc

    通过占位符(问号)和`PreparedStatement`,我们可以安全地传递用户输入到SQL语句中,避免了可能的安全风险。 9. **异常处理**: Spring JDBC对JDBC抛出的异常进行了封装,转换为更有意义的Spring ...

    Spring的Aop和Ioc示例

    1. **构造函数注入**:在创建对象时,依赖对象通过构造函数参数传递进来。 2. **setter方法注入**:通过调用对象的setter方法来设置依赖对象。 3. **接口注入**:Spring提供一个接口,对象通过实现该接口接收依赖。 ...

    ioc AOP深入了解

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

    Spring AOP 实现

    在这个“Spring AOP 实现”的主题中,我们将深入探讨如何通过注解在Spring中实现AOP,以及如何为AOP通知传递参数。 首先,让我们了解AOP的基本概念。AOP的核心思想是切面(Aspect),它封装了特定的横切关注点。...

    Java Web开发异常处理方式及AOP技术

    在上述代码中,`pointcut`定义了要拦截的Join Point(连接点),`throwing`参数将抛出的异常传递给通知方法。通过这种方式,我们可以统一处理服务层的所有空指针异常,而无需在每个方法内部重复编写异常处理代码。 ...

    详解spring切面使用传递给被通知方法的参数

    "Spring 切面使用传递给被通知方法的参数详解" Spring 切面是一种非常强大的技术,可以帮助开发者将一些公共的功能抽象出来,并将其应用到特定的业务逻辑中。在 Spring 中,切面可以使用传递给被通知方法的参数来...

    T2 spring-aop

    3. 使用通知参数来传递上下文信息,如方法参数、目标对象等。 通过以上内容,我们可以看出Spring AOP在简化代码、提高可维护性方面的重要作用。在实际开发中,结合Eclipse的便利,能够更加高效地实现AOP编程,提高...

    Spring Boot 实现 AOP 动态热插拔功能 教程配套源码

    我们以一个例子来说明一下为什么需要 AOP 动态热插拔:我们系统有一个 AOP 切面,它负责了记录用户传递参数、执行时间、接口返回结果,默认是不开启的,现在因为某些原因需要检测某个接口参数接收情况 + 耗时 + 返回...

    AOP面向切面详解

    `args`和`target`用于指定传递给`login`方法的参数和目标对象。 2. `bfLogin2`的另一个版本进一步细化了切点,通过`args`限制只在传入两个参数时执行。 3. `@AfterReturning`注解的`afterSing`方法是一个后置通知...

    aopalliance-1.0 jar包

    2. **org.aopalliance.intercept.MethodInvocation**: 这个接口代表了一个方法调用,提供了获取方法信息、调用目标方法以及传递参数的能力。拦截器通过这个接口来执行实际的方法调用。 3. **org.aopalliance.aop....

    自定义注解实现伪动态传参的小demo

    在这个“自定义注解实现伪动态传参的小demo”中,我们将探讨如何创建一个自定义注解,以允许在注解中传递类似于动态参数的数据。 首先,自定义注解的定义通常以`@interface`关键字开始,我们可以定义一些元素(也...

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

    当调用代理对象的方法时,实际上是调用这个`invoke`方法,其中`proxy`参数是代理对象,`method`参数是被调用的方法,`args`参数是传递给方法的参数。 3. **AOP的切面(Aspect)**: - 在AOP中,切面定义了关注点和...

Global site tag (gtag.js) - Google Analytics