spring aop中有些参数比较难以理解 比如说arg-names,下面先从简单说起:
Aop类
- /**
- * 需要织入的类,及其方法。
- * @author ChdYan
- * @since jdk1.6
- */
- public class TestAop {
- /**
- * 在目标方法前织入的方法
- * @param i 测试参数
- * @param name 测试参数
- * @param p 测试参数
- */
- public void before(String name, int age, String address) {
- System.out.println(name + "," + age + "," + address);
- System.out.println("--------------开始啦before------------");
- }
- /**
- * 在目标方法返回前织入的方法
- * @param i
- * @param name
- * @param p
- */
- public void after(String name, int age, String address) {
- System.out.println(name + "," + age + "," + address);
- System.out.println("--------------开始啦after------------");
- }
- /**
- * 在目标方法前后织入的方法
- * @param pjp
- * @param name
- * @param age
- * @throws Throwable
- */
- public void around(ProceedingJoinPoint pjp) throws Throwable {
- System.out.println(Arrays.toString(pjp.getArgs()));
- System.out.println("--------------开始啦around------------");
- pjp.proceed(pjp.getArgs());
- System.out.println("--------------结束啦around------------");
- }
- /**
- * 在目标方法返回后后织入的方法
- * @param name
- */
- public void afterReturning(String name){
- System.out.println("======after Return==== " + name);
- }
- /**
- * 在目标方法返回后后织入的方法
- * @param name
- */
- public void afterThrowing(Exception e){
- System.out.println("======after Return====e " + e);
- }
- }
befor、after里都有三个参数。下面看需要织入的类
- /**
- * 简单测试类,测试织入增强。
- * @author ChdYan
- <a href="mailto:*@since">* @since</a> jdk1.6
- */
- public class User {
- private String username;
- /**
- * 需要织入的方法
- * @param name 名字
- * @param age 姓名
- * @param address 地址
- * @return 用户名称
- */
- public String getUsername(String name, int age, String address) {
- System.out.println("------------调用方法开始:-------");
- System.out.println(name + "----" + age + "----" + address);
- System.out.println("------------调用方法结束:-------");
- return username;
- }
- /**
- * 需要织入的方法
- * @param name 名称
- * @return 用户名称
- */
- public String getUsername(String name) {
- System.out.println("------------调用方法开始:-------");
- System.out.println(name + "----");
- System.out.println("------------调用方法结束:-------");
- if(1 == 1) {
- throw new RuntimeException();
- }
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
织入类比较简单,明白意思就行。
- <bean class="cn.g.model.User" id="user">
- <property name="username" value="zhangshan"></property>
- </bean>
- <bean id="aopTest" class="cn.g.aop.TestAop"></bean>
- <aop:config proxy-target-class="true">
- <aop:pointcut expression="execution(* cn.g.model.*.get*(..)) and args(arg1, arg2, arg3)" id="acut"/>
- <aop:aspect ref="aopTest">
- <aop:before method="before" pointcut-ref="acut" arg-names="arg1, arg2, arg3"/>
- <aop:after method="after" pointcut-ref="acut" arg-names="arg1, arg2, arg3"/>
- <aop:around method="around" pointcut="execution(* cn.g.model.*.get*(..))"/>
- <aop:after-returning method="afterReturning" pointcut="execution(* cn.g.model.*.get*(..))" returning="arg" arg-names="arg"/>
- <aop:after-throwing method="afterThrowing" pointcut="execution(* cn.g.model.*.get*(..))" throwing="arg" arg-names="arg"/>
- </aop:aspect>
- </aop:config>
expression="execution(* cn.g.model.*.get*(..)) and args(arg1, arg2, arg3)" args在这里是作为织入方法的入参,所以其个数与类型需要与织入方法一致,并且与在<aop:before与<aop:after中的增强也要一致的,才能织入。主要原因是:1.方法前织入增强也只是知道方法入参,其他参数一概获取不到,那么只能用方法参数作为args的入参了。2.同样,方法后织入增强也是只知道方法的参数,其他一概不知。。
<aop:around 通知的入参 ProceedingJoinPoint pjp由spring自动注入,ProceedingJoinPoint pjp所含了所有的入参与目标方法等,所以不必增加像<aop:before中的arg-names和expression中也不必包含
<aop:after-returning 中增强的入参只有一个,就是织入方法的返回值,类型、个数要一致,所以很好理解。
<aop:after-throwing 同 <aop:after-returning 一样,增强中也只有一个入参且就是抛出的异常,所以类型、个数要一致,这也比较好理解
- /**
- * 测试类
- * @author ChdYan
- * @since jdk1.6
- */
- public class TestAop {
- public static void main(String[] args) {
- ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
- User user = ctx.getBean(User.class);
- System.out.println(user.getUsername("romico", 25, "china"));
- System.out.println(user.getUsername("romico"));
- }
- }
最后结果如图
相关推荐
不过,理解XML配置方式有助于深入理解Spring AOP的底层原理。 总的来说,Spring AOP通过XML配置为我们提供了一种灵活的方式来管理横切关注点,使我们的代码更加模块化和可维护。通过定义Advisor、切点和通知,我们...
总结而言,`spring-context-4.2.xsd`是Spring 4.2版本Context模块的核心配置规范,它定义了Spring XML配置文件的结构,涵盖了bean定义、依赖注入、作用域、AOP、事件处理等多个方面的内容。理解并熟练运用`spring-...
Spring AOP中使用args表达式的方法示例 Spring AOP(Aspect-Oriented Programming)是一种面向切面编程的技术, args表达式是AOP中的一种表达式,它可以用来指定目标方法的参数类型和数量。下面我们将详细介绍...
Spring AOP(面向切面编程)是Spring框架中的一个重要组成部分,它允许我们在不修改源代码的情况下,通过在程序运行时动态地插入代码来实现横切关注点,如日志记录、事务管理、性能监控等。在Spring AOP中,日志框架...
总之,`spring-context.zip`中的`applicationContext.xml`是Spring应用的核心配置,它定义了bean的结构、依赖关系以及各种行为,是理解与掌握Spring框架的关键。通过熟练运用这些配置,开发者可以构建出灵活、可扩展...
2. **理解Spring的打包结构**:Spring的库文件通常被打包成不同的模块,每个模块负责不同的功能。 3. **使用Spring Source Tool Suite (STS)**:这是一个专为Spring开发设计的IDE,能够极大地提高开发效率。 4. **...
Spring.NET是Spring框架的一个.NET版本,它提供了核心容器、数据访问/集成、AOP(面向切面编程)、Web支持以及测试工具等模块。核心容器负责对象的创建和管理,而依赖注入是其核心功能,允许开发者解耦组件,降低...
首先,我们需要理解Spring Modules(SpringModule)项目,这是一个为Spring框架提供额外功能的开源项目,它包含了对包括EHCache在内的多种缓存系统的支持。SpringModule使得在Spring中集成缓存变得更加方便,通过...
Spring-3.0.xsd还引入了一些新的特性,例如: - **Namespace Handler**:允许自定义命名空间,扩展XML配置,如数据源、任务调度等。 - **Profile**:支持环境相关的配置,可以根据不同的运行环境加载不同的配置。 -...
在IT行业中,Spring框架...结合Spring的IoC和AOP特性,我们可以方便地管理服务实例和事务处理,提高代码的可维护性和复用性。在实际开发中,还需要注意网络环境、异常处理、性能优化等方面的问题,确保系统的稳定运行。
《Spring LDAP 1.3.1.RELEASE:深入理解与应用》 Spring LDAP是Spring框架的一个扩展,专门用于处理 Lightweight Directory Access Protocol (LDAP) 的应用程序开发。它将Spring的编程模型引入了目录服务,提供了...
【Spring入门笔记】主要介绍了Spring框架的基础知识,包括Spring的核心概念、Bean的配置与作用域、依赖注入、SpringAop和SpringJdbc,以及事务声明。以下是对这些知识点的详细说明: 1. **什么是Spring?** Spring...
<property name="name" value="Spring Example"/> ``` 在这个例子中,`<beans>`元素是根元素,表示一个配置文件。`<bean>`元素则用来定义一个Bean,`id`属性用于唯一标识Bean,`class`属性指定了Bean的全限定...
在本文中,我们将深入探讨如何在Spring Security 2.0版本中配置并使用AOP(面向切面编程)来实现方法级别的权限控制。首先,我们需要理解Spring Security的基础概念。 1. **Spring Security基本架构** Spring ...
在Spring框架中,AOP(面向切面编程)和IOC(控制反转)是两个核心概念,它们极大地简化了Java应用的开发和维护。下面将详细解释这两个概念以及如何在实际应用中使用它们。 **控制反转(Inversion of Control, IOC...
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd ...
--全局初始化参数--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> 4.在Servlet中使用...
标题 "spring01-1" 暗示我们即将探讨的是关于 Spring 框架的基础内容,特别是不涉及注解的使用方式。Spring 是一个广泛使用的 Java 应用开发框架,它提供了依赖注入(Dependency Injection,DI)和面向切面编程...
1. **AOP(面向切面编程)**:AOP是Spring框架的一个重要特性,它允许程序员定义“切面”,这些切面可以包含业务逻辑的“侧面”——例如日志、事务管理、安全检查等。AOP使得我们可以将这些关注点与主要的业务逻辑...
- **Spring AOP**:提供了面向切面的编程实现,从而可以将一些通用的服务如日志记录、事务管理、安全检查等从业务逻辑中解耦出来。 - **Spring DAO**:提供了JDBC的抽象层,这使得数据库访问变得更为容易,同时大大...