`
zk_chs
  • 浏览: 215487 次
  • 性别: 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 aop 依赖jar

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下对程序进行功能增强的机制。AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点...

    spring aop实例

    **Spring AOP 实例详解** 在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它允许开发者将关注点从核心...

    spring aop简单应用示例

    在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许程序员在不修改原有业务代码的情况下,实现如日志记录、性能监控、事务管理等横切关注点的功能。本示例将深入探讨Spring AOP的基础知识,以及如何在...

    SpringMVC+springAOP+spring security+Hibernate整合实例代码

    Spring MVC、Spring AOP、Spring Security和Hibernate是Java开发中常用的四大框架,它们各自负责不同的领域,但在实际项目中往往需要进行整合以实现更高效、更安全的开发。本实例代码提供了一个完整的整合示例,涵盖...

    初探spring aop内部实现 java

    Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,对程序的行为进行统一的管理和控制。本篇文章将深入探讨Spring AOP的内部实现,以及如何通过源代码理解其DataSource...

    模拟spring aop技术

    **模拟Spring AOP技术** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组件,它提供了一种在不修改源代码的情况下,通过代理模式来实现横切关注点(如日志、事务管理等)的...

    Spring AOP中文教程

    ### Spring AOP中文教程知识点详解 #### 一、AOP概览 面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中分离出来。横切关注...

    Spring aop、jdbc和事务tx练习

    Spring JDBC的核心是`JdbcTemplate`和`SimpleJdbcTemplate`,它们提供了事务管理、参数绑定、异常转换等功能,避免了SQL注入等问题。 3. **Spring 事务管理(TX)** Spring TX模块提供了声明式和编程式的事务管理...

    springAop多数据源

    首先,"SpringAop多数据源"指的是在同一个应用程序中同时处理多个不同的数据库源。这种设计模式在分布式系统或有多个业务模块需要独立连接不同数据库的情况下非常常见。在Spring框架中,我们可以利用DataSource接口...

    Spring拦截器,高级参数绑定

    高级参数绑定是指在Controller方法中,Spring MVC能够自动将请求参数绑定到方法参数上,包括基本类型、复杂对象甚至自定义类型。例如,可以使用`@RequestParam`、`@PathVariable`、`@RequestHeader`、`@RequestBody`...

    Spring AOP四种创建通知(拦截器)类型

    ### Spring AOP 四种创建通知(拦截器)类型详解 Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要模块,它提供了在应用代码中添加横切关注点的能力,如日志记录、事务管理、权限...

    Spring AOP应用

    **Spring AOP 应用详解** Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在程序运行时动态插入代码的能力,以实现跨切面的关注点,如日志、事务管理、权限控制...

    Java框架技术 Spring 学习案例 Spring AOP案例和Spring事务处理案例

    此外,Spring还提供了一系列的数据绑定和类型转换工具,如ConversionService,帮助开发者处理不同数据格式的兼容问题。 在Spring学习案例中,每个案例都是一次深入理解Spring框架特性的实践机会。通过实际操作,你...

    spring对AOP的支持(使用Spring的配置文件来演示)

    **Spring AOP支持详解** Spring框架是Java领域中极为重要的一个组件,它为开发者提供了许多便利,其中之一就是对面向切面编程(Aspect Oriented Programming,简称AOP)的支持。AOP允许我们分离关注点,将横切关注...

    Spring aop 基于schema的AOP支持及JoinPoint的使用、如何使用CGLIB代理

    `&lt;aop:before&gt;`, `&lt;aop:after&gt;`, `&lt;aop:around&gt;`等元素用于绑定通知到切点。 4. **织入(Weaving)** - 织入是将切面应用到目标对象的过程。Spring支持三种类型的织入:编译时、加载时和运行时。在基于Schema的AOP...

    spring3.0.5的aop使用

    本文将深入探讨Spring 3.0.5版本中的AOP(面向切面编程)特性,以及如何使用它来提升代码的可维护性和模块化。AOP是一种编程范式,它允许程序员定义“切面”,这些切面可以包含业务逻辑的各个部分,如日志、事务管理...

    spring ioc aop mvc boot-学习笔记.docx

    Spring框架是Java开发中不可或缺的一部分,它为开发者提供了强大的依赖注入(IOC)和面向切面编程(AOP)功能,以及用于构建Web应用程序的MVC框架。Spring Boot则是基于Spring框架构建的应用程序启动器,旨在简化...

    struts2+hirbenate+SpringAOP

    Struts2、Hibernate和Spring AOP是Java Web开发中三个重要的框架,它们分别负责不同的职责。Struts2作为MVC(Model-View-Controller)框架,主要处理HTTP请求,实现业务逻辑与视图的解耦;Hibernate是一个持久化框架...

    Spring AOP实现

    &lt;bean id="testBeforeAdvice" class="com.company.springaop.test.TestBeforeAdvice"/&gt; ``` 5. 使用接口: 在示例中,Bean接口被用来确保面向接口编程,这是Spring推荐的最佳实践,因为它有助于解耦和测试。...

    spring aop 实例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和解耦应用程序的方式,特别是在处理横切关注点时,如日志、事务管理、安全性等。这个实例将帮助我们深入理解如何在实际项目中应用Spring...

Global site tag (gtag.js) - Google Analytics