`
zk_chs
  • 浏览: 212870 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Spring Aop,参数绑定

阅读更多

目前所有的spring文章一律使用spring 4.2.4,包括前面的三篇

 

在前一篇中,代码里有一些@PointCut、@Before等的基本应用代码,而这次,我们将一起学习一下aop中的参数绑定、在此之前,我们先定义一个最基本的bean

@Component
public class HelloWorld {

	public void sayHello (Data param){
		System.out.println("Hello World! -> " + param.name);
	}
	
}

 在这个bean中、sayHello(Data)即我们要进行aop的方法、它有一个类型为Data的参数、Data也很简单

public class Data {
	
	public String name;
	
	public Data (String name){
		this.name = name;
	}

}

 

接下来定义切面

@Aspect
@Component
public class HelloWorldAspect {
	
	@Before(value = "execution(* bindData.HelloWorld.sayHello(*)) && args(param2)")
	private void beforeSayHello (Data param2){
		System.out.println("this is before advice! -> " + param2.name);
		param2.name = "change";
	}
	
}

 

为了能使大家更好的理解、我特意没有将所有的参数均命名为param~~~

 

 首先说明一点、sayHello(Data param)方法的参数名与切面中的args参数名完全没有关系。注意,我说的是参数名,而不是参数类型没关系。

下面我们逐一介绍上面@Before(value = "execution(* bindData.HelloWorld.sayHello(*)) && args(param2)")

@Before:表示前置通知。

value:匹配切点。

execution:声明具体的切点;此处表示取bindData包下HelloWorld类的sayHello方法、sayHello方法有且仅有一个参数,该方法可以返回任意的值。

args:匹配参数;在这里,param2首先匹配beforeSayHello方法中的param2参数,注意,这里是匹配名称相同的参数,然后取得param2的类型,为Data,表示匹配的sayHello(*)方法中的参数类型必须为Data,否则不予匹配。

 

 最后,我们进行测试,当然还是全注解模式:

@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "bindData")
public class AopConfig {

	@Test
	public void testBeforeSayHello (){
		ApplicationContext ctx = new AnnotationConfigApplicationContext(AopConfig.class);
		Data data = new Data("no change");
		HelloWorld hw = ctx.getBean(HelloWorld.class);
		hw.sayHello(data);
	}
	
}

 

 结果为

this is before advice! -> no change
Hello World! -> change

 

 这样一来,我们就能实现在前置通知中改变被切方法的参数值了

 

还有一点需要注意:

it’s worth pointing out that this won’t work for generic collections. So you cannot define a pointcut like this:

@Before("execution(* ..Sample+.sampleGenericCollectionMethod(*)) && args(param)")
public void beforeSampleMethod(Collection<MyType> param) {
    // Advice implementation
}

 意思是不支持范型集合,不要像上面这样使用

 

 

 

分享到:
评论

相关推荐

    Spring拦截器,高级参数绑定

    spring拦截器,高级参数绑定,controller返回值

    Spring开发指南

    Spring初探 准备工作 构建Spring基础代码 Spring 基础语义 Dependency Injection 依赖注入的几种实现类型 ... Dynamic Proxy 与Spring AOP CGLib 与 Spring AOP AOP 应用 DAO Support Remoting

    spring4.3.2参考文档(英文)

    Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。 Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,...

    spring代码课堂笔记

    Spring AOP 通知种类:设置次要业务与(被监听方法)绑定执行顺序问题 1.前置通知: 1)切面:次要业务方法 2) 执行切入点:被拦截的主要业务方法 2.后置通知: 1)执行切入点:被拦截的主要业务方法 2)切...

    Spring AOP 动态多数据源的实例详解

    Spring AOP 动态多数据源的实例详解 当项目中使用到读写分离的时候,我们就会遇到多数据源的问题。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。例如在一个spring和Mybatis的框架的...

    spring杂谈 作者zhang KaiTao

    1.6 »Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了) 1.7 Spring开闭原则的表现-BeanPostProcessor扩展点-2 1.8 Spring3.1 对Bean Validation规范的新支持(方法级别验证) 1.9 Spring对事务...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

    spring.net中文手册在线版

    26.4.The Spring.NET AOP Cookbook 26.4.1.缓存 26.4.2.性能监视 26.4.3.重试规则 Spring.NET AOP最佳实践 第二十七章. .NET Remoting快速入门 27.1.简介 27.2.Remoting实例程序 27.3.实现 27.4.运行程序 27.5....

    Spring 2.0 开发参考手册

    6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @AspectJ支持 6.2.1. 启用@AspectJ支持 6.2.2. 声明一个切面 6.2.3. 声明一个...

    Spring中文帮助文档

    使用@RequestParam绑定请求参数到方法参数 13.12.5. 使用@ModelAttribute提供一个从模型到数据的链接 13.12.6. 使用@SessionAttributes指定存储在会话中的属性 13.12.7. 自定义WebDataBinder初始化 13.13. 更多...

    spring事务详解

    Spring的事务框架将开发过程中事务管理相关的关注点进行适当的...而最主要的是,结合Spring的AOP框架,Spring的事务框架为我们 带来了原来只有CMT才有的声明式事务管理的特殊待遇,却无需绑定到任何的应用服务器上。

    Spring API

    使用@RequestParam绑定请求参数到方法参数 13.12.5. 使用@ModelAttribute提供一个从模型到数据的链接 13.12.6. 使用@SessionAttributes指定存储在会话中的属性 13.12.7. 自定义WebDataBinder初始化 13.13. 更多...

    spring chm文档

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 ...

    Springframework开发参考手册chm格式

    chm,一份对Spring特性的参考指南,内容涵盖Spring概述、使用场景、Spring2.0新特性、面向切面编程、中间层、WEB层、校验,数据绑定,BeanWrapper,与属性编辑器、使用Spring进行面向切面编程(AOP 资源太大,传百度...

    开源框架 Spring Gossip

    &lt;br&gt;AOP 入门 AOP 的观念与术语都不是很直觉,可以先从代理机制(Spring 实现 AOP 的一种方式)来看看实际的例子,从而了解 AOP 的观念与各种术语。 从代理机制初探 AOP 动态代理 &lt;br&gt;AOP 观念与...

    Spring.3.x企业应用开发实战(完整版).part2

    10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC数据连接泄漏 10.7.3 通过DataSourceUtils获取数据连接 10.7.4 通过...

    JavaSpring的商城项目前台+后台+api

    通过配置文件或注解,对象的创建和绑定由Spring容器管理,而不是由应用程序代码直接控制。 面向切面编程(AOP):Spring支持AOP,允许定义方法拦截器和切点来分离应用程序的业务逻辑和系统服务。这有助于增加模块化...

    Spring 5 英文文档全套.7z

    IoC容器,事件,资源,i18n,验证,数据绑定,类型转换,SpEL,AOP。 测试 模拟对象,TestContext框架,Spring MVC测试,WebTestClient。 资料存取 事务,DAO支持,JDBC,O / R映射,XML编组。 Web Servlet ...

Global site tag (gtag.js) - Google Analytics