`
zhaojian0910
  • 浏览: 47563 次
社区版块
存档分类
最新评论

Spring笔记之Spring的AOP支持

阅读更多

纵观AOP编程,其中需要程序员参与的只有3个部分:

  • 定义普通业务组件
  • 定义切入点:一个切入点可能横切多个业务组件
  • 定义增强处理:增强处理就是在AOP框架为普通业务组件织入的处理动作

代理对象的方法 = 被代理对象的方法 + 增强处理

 

下面记录一下,Spring中的AOP配置

<?xml version="1.0" encoding="UTF-8"?>
<beans ......
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="......
			http://www.springframework.org/schema/aop
			http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
	
	<!-- 启动@AspectJ支持 -->
	<aop:aspectj-autoproxy/>
	
	<!-- 如果不打算用Spring的XML Schema配置方式,则应该在Spring配置文件中增加如下片段来启用@AspectJ支持 -->
	<!--<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"/>-->
	
</beans>

 为了在Spring应用中启动@AspectJ支持,还需要在应用的类路径中增加两个AspectJ库:aspectjweaver.jar和aspectjrt.jar,字节使用AspectJ安装路径的lib目录下的两个JAR文件即可。

 

1、定义切面Bean

使用@AspectJ标注一个Java类,该Java类将会作为切面Bean

2、定义Before增强处理

package com.zhao.aopdemo;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;


@Aspect
public class BeforeAdviceTest {

	@Before("execution(* com.zhao.aopdemo.*.say*(..))")
	public void beforeSay()
	{
		System.out.println("Before say...");
	}
}

 

// Before注解

@Before("execution(* com.zhao.aopdemo.*.say*(..))")

解释:com.zhao.aopdemo包下面所有类中的以say开头的方法

3、定义AfterReturning增强处理

package com.zhao.aopdemo;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class AfterReturningAdviceTest {

	@AfterReturning(returning = "word", pointcut = "execution(* com.zhao.aopdemo.*.say*(..))")
	public void afterReturningSay(Object word) {
		System.out.println("After Returning say..." + word);
	}
}

 使用@AfterReturning 的时候,指定了一个returning的属性,该属性值为word,这表明允许在增强处理方法afterReturningSay中使用名为word的形参,该形参代表目标发那个发的返回值。

4、AfterThrowing增强处理

package com.zhao.aopdemo;

import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class AfterThrowingTest {
	@AfterThrowing(throwing = "ex", pointcut = "execution(* com.zhao.aopdemo.*.say*(..))")
	public void afterThrowingSay(Throwable ex) {
		System.out.println("目标类抛出的异常:" + ex);
	}
}

 输出:

Before say...

目标类抛出的异常:java.lang.ArithmeticException: / by zero

Exception in thread "main" java.lang.ArithmeticException: / by zero

at com.zhao.aopdemo.Chinese.sayThrowable(Chinese.java:21)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

......

主程序依然结束了

这里afterThrowingSay方法的形参类型如果换成NullPointerException异常,该切入点就只匹配NullPointerException异常

 

5、After增强处理

Spring还提供了一个After增强处理,它与AfterReturning增强处理有点相似,但是也有区别

  • AfterReturning增强处理只有在目标方法成功完成后才会被织入
  • After增强处理不管目标方法如何结束(包括成功完成和遇到异常终止两种情况),它都会被织入

6、Around增强处理

未完待续...

分享到:
评论

相关推荐

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    Spring AOP IOC源码笔记.pdf

    Spring AOP支持基于代理和基于注解的两种方式。基于代理的方式通过生成代理类来拦截方法调用,而基于注解的方式则更易于理解和使用。 总结,Spring框架的IoC和AOP特性极大地简化了Java开发,通过依赖注入解耦了组件...

    spring源码--AOP流程--笔记.docx

    Spring AOP 源码分析笔记 Spring AOP(Aspect-Oriented Programming)是一种编程范式,它允许开发者 modularize cross-cutting concerns,即将横切关注点模块化。AOP 使得开发者可以将一些公共的功能模块化,以便在...

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

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

    SpringAop学习笔记以及实现Demo

    **Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...

    Spring学习笔记(15)----使用Spring的注解方式实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring框架的注解方式来实现面向切面编程(AOP)。AOP是一种编程范式,它允许我们定义横切关注点,如日志、事务管理等,然后将这些关注点模块化并插入到应用程序的多...

    达内,tarena,spring笔记,springPPT课件,达内spring笔记

    Spring笔记可能涵盖了以下内容: 1. **IoC(Inversion of Control)容器**:Spring的核心特性之一,通过反转控制权,让框架负责管理对象的生命周期和装配,开发者只需定义配置,无需手动创建对象。 2. **依赖注入...

    Spring笔记.doc

    2. AOP(面向切面编程):Spring 的 AOP 功能允许开发者定义横切关注点,如日志、事务管理等,这些关注点可以被编织到应用程序的多个点上,提高代码的复用性和模块化。 【Spring 与 Struts 整合】 Spring 与 ...

    马士兵Spring课堂笔记(超级详细版).pdf

    马士兵Spring课堂笔记(超级详细版) 本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring...

    Spring AOP学习笔记

    NULL 博文链接:https://linres.iteye.com/blog/281221

    Spring笔记示例源代码

    "Spring笔记示例源代码"这个资源很可能是为了帮助学习者深入理解Spring框架的各种功能和用法而提供的实际代码示例。 1. **Spring IoC**:IoC是Spring的核心特性,它将对象的创建和管理权交给Spring容器,使得开发者...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    Spring Aop 学习笔记

    Spring Aop 学习笔记

    ssh-aop笔记

    SSH-AOP笔记主要涵盖的是Spring、Struts和Hibernate三大框架集成使用时,如何结合Aspect Oriented Programming(面向切面编程)的理念进行应用增强。在Java企业级开发中,SSH是常用的MVC架构,而AOP则是一种编程范式...

    Spring笔记.docx

    3. **AOP编程的支持**:Spring支持面向切面编程(Aspect-Oriented Programming, AOP),这使得可以在不修改代码的情况下为应用程序添加新的行为,例如权限控制、日志记录等。 4. **声明式事务管理**:Spring支持...

    Spring学习笔记+学习源码.zip

    Spring框架是Java开发中的核心组件,它为应用程序提供了一个全面的基础设施,包括依赖注入(DI)、面向切面编程(AOP)以及数据访问等服务。SSM是Spring、SpringMVC和MyBatis的组合,是Java Web开发的常用框架栈。这...

    Spring AOP源码笔记

    【Spring AOP源码笔记】 Spring AOP是Spring框架的核心组件之一,它实现了面向切面编程(Aspect-Oriented Programming,简称AOP),允许开发者定义“切面”,这些切面可以封装横切关注点,如日志记录、事务管理等。...

    学习Spring笔记_AOP_Annotation实现和XML实现

    这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...

    Spring_AOP笔记Spring_AOP笔记

    - **动态代理**:在运行时创建,Spring支持JDK动态代理和CGLIB动态代理,可以为任何类创建代理,即使它没有实现接口。 在Spring AOP中,配置切面主要是在`applicationContext.xml`配置文件中完成,或者使用注解式...

Global site tag (gtag.js) - Google Analytics