目标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:args>`:在XML配置中,可以使用`<aop:args>`元素来指定传递给通知的方法参数。 3. **处理AOP参数**: - 在通知方法中,可以使用`JoinPoint`对象来获取方法的参数信息,如`JoinPoint.getArgs()`方法可以...
你可以指定一个`throwing`参数,该参数可以引用抛出的异常对象。 2. `@Around`: 这是最灵活的通知类型,允许你在方法调用前后完全控制流程。`@Around`通知可以捕获并处理异常,或者决定是否将异常传递给调用链。 ...
在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...
当我们谈论“common_加入缓存AOP,树结构路径参数填充”时,这涉及到两个主要概念:缓存AOP(面向切面编程)和树结构路径参数的处理。下面将详细解释这两个知识点。 首先,让我们来理解什么是缓存AOP。AOP(Aspect-...
通过占位符(问号)和`PreparedStatement`,我们可以安全地传递用户输入到SQL语句中,避免了可能的安全风险。 9. **异常处理**: Spring JDBC对JDBC抛出的异常进行了封装,转换为更有意义的Spring ...
1. **构造函数注入**:在创建对象时,依赖对象通过构造函数参数传递进来。 2. **setter方法注入**:通过调用对象的setter方法来设置依赖对象。 3. **接口注入**:Spring提供一个接口,对象通过实现该接口接收依赖。 ...
- **构造器注入(Constructor Injection)**:通过构造函数参数来注入依赖。 **依赖注入的优点**: - **减少耦合**:依赖关系由容器管理,而不是硬编码在类中。 - **易于测试**:可以通过构造函数或setter方法注入...
在这个“Spring AOP 实现”的主题中,我们将深入探讨如何通过注解在Spring中实现AOP,以及如何为AOP通知传递参数。 首先,让我们了解AOP的基本概念。AOP的核心思想是切面(Aspect),它封装了特定的横切关注点。...
在上述代码中,`pointcut`定义了要拦截的Join Point(连接点),`throwing`参数将抛出的异常传递给通知方法。通过这种方式,我们可以统一处理服务层的所有空指针异常,而无需在每个方法内部重复编写异常处理代码。 ...
"Spring 切面使用传递给被通知方法的参数详解" Spring 切面是一种非常强大的技术,可以帮助开发者将一些公共的功能抽象出来,并将其应用到特定的业务逻辑中。在 Spring 中,切面可以使用传递给被通知方法的参数来...
3. 使用通知参数来传递上下文信息,如方法参数、目标对象等。 通过以上内容,我们可以看出Spring AOP在简化代码、提高可维护性方面的重要作用。在实际开发中,结合Eclipse的便利,能够更加高效地实现AOP编程,提高...
我们以一个例子来说明一下为什么需要 AOP 动态热插拔:我们系统有一个 AOP 切面,它负责了记录用户传递参数、执行时间、接口返回结果,默认是不开启的,现在因为某些原因需要检测某个接口参数接收情况 + 耗时 + 返回...
`args`和`target`用于指定传递给`login`方法的参数和目标对象。 2. `bfLogin2`的另一个版本进一步细化了切点,通过`args`限制只在传入两个参数时执行。 3. `@AfterReturning`注解的`afterSing`方法是一个后置通知...
2. **org.aopalliance.intercept.MethodInvocation**: 这个接口代表了一个方法调用,提供了获取方法信息、调用目标方法以及传递参数的能力。拦截器通过这个接口来执行实际的方法调用。 3. **org.aopalliance.aop....
在这个“自定义注解实现伪动态传参的小demo”中,我们将探讨如何创建一个自定义注解,以允许在注解中传递类似于动态参数的数据。 首先,自定义注解的定义通常以`@interface`关键字开始,我们可以定义一些元素(也...
当调用代理对象的方法时,实际上是调用这个`invoke`方法,其中`proxy`参数是代理对象,`method`参数是被调用的方法,`args`参数是传递给方法的参数。 3. **AOP的切面(Aspect)**: - 在AOP中,切面定义了关注点和...