`

知识点七:Spring AOP技术

阅读更多
Spring提供了两种切面使用方式,实际工作中我们可以选用其中一种:
1 基于xml配置方式进行AOP开发
2 基于注解方式进行AOP开发


下面是基于注解的方式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       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/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
        <aop:aspectj-autoproxy/><!-- 启动对@AspectJ注解的支持 -->
</beans>



//@Aspect 表示此类是一个切面,包含切入点和通知
//@Component 表示将此切面交由spring容器管理,此时必须在配置文件里面开启自动扫描
//  开启自动扫描   <context:component-scan base-package="cn.itcast"/>
@Aspect  @Component
public class MyInterceptor {
//(1) 切入点的描述
/**
	 *@Pointcut :表示规定切入点 
	 *execution() 语法规范
	 * 第一个“*”表示任意返回结果类型
	 * “cn.itcast.service.impl.PersonServiceBean”:表示对此类进行拦截,
	 * 如果是cn.itcast.service..*.*:表示对包cn.itcast.service以及子包里所
有的类的所有方法进行拦截,
	 * (..)表示参数 
	 */	
@Pointcut("execution(* 
cn.itcast.service.impl.PersonServiceBean.*(..))")
//(2)声明一个切入点
public void anyMethod(){}
	
//(3) 声明通知及注入方式
@Before("anyMethod()")
public void doAccessCheck(){
		System.out.println("前置通知");
	}
@AfterReturning("anyMethod()")
	public void doAfterReturning(){
		System.out.println("后置通知");
	}
	@After("anyMethod()")
	public void doAfter(){
		System.out.println("最终通知");
	}
	@AfterThrowing("anyMethod()")
	public void doAfterThrowing(){
		System.out.println("异常通知");
	}
	@Around("anyMethod()") //环绕通知的方法签名是规定的!!!
	public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{
		//if(){适合判断用户权限
		System.out.println("进入方法");
		Object result = pjp.proceed();
		System.out.println("退出方法");
		//}
		return result;
	}   
}


注册给容器后,如果执行此切面规定拦截的类的方法时,按照@Before等方式加上“通知”

得到的运行结果!!!!!一定注意顺序
前置通知
进入方法
我是save()方法
后置通知
最终通知
退出方法
―――――――――――
如果想在通知中得到拦截方法的参数,该怎么做?
@Before("anyMethod() && args(name)")
public void doAccessCheck(String name){
System.out.println("前置通知");
}
注意:通知方法的参数名一定要和args指定的一致!!!

如果想得到拦截方法的返回结果,该怎么做?


@AfterReturning(pointcut="anyMethod()",returning="result")
public void doAfterReturning(String result){
		System.out.println("后置通知:"+result);
}



如果想得到拦截方法抛出的异常,该怎么做?


@AfterThrowing(pointcut="anyMethod()",throwing="e")
public void doAfterThrowing(Exception e){
		System.out.println("异常通知:"+e);
}


基于xml配置方式进行AOP开发

<aop:config>
    <aop:aspect id="asp" ref="myInterceptor">
            <aop:pointcut id="mycut"
expression="execution(* cn.itcast.service..*.*(..))"/>
            <aop:before pointcut-ref="mycut" method="doAccessCheck"/>
            <aop:after pointcut-ref="mycut" method="doAfterReturning"/>
            <aop:after-returning pointcut-ref="mycut" method="doAfter"/>
            <aop:after-throwing
pointcut-ref="mycut" method="doAfterThrowing"/>
            <aop:around pointcut-ref="mycut" method="doBasicProfiling"/>
          </aop:aspect>
    </aop:config>

如果只是拦截返回值为String类型的方法,切面可以这样写
<aop:pointcut id="mycut" expression="execution(java.lang.String
cn.itcast.service..*.*(..))"/>
如果要求第一个参数为String类型,不管其后面有几个参数
<aop:pointcut id="mycut" expression="execution(*
cn.itcast.service..*.*(java.lang.String,..))"/>
如果要求返回值类型不为void,怎么写?           
<aop:pointcut id="mycut" expression="execution(!void
cn.itcast.service..*.*(..))"/>


分享到:
评论

相关推荐

    基于java的企业级应用开发:Spring AOP简介.ppt

    Spring AOP允许开发者专注于核心业务逻辑,而把非业务相关的关注点,如日志、事务管理等,分离出来,从而提高开发效率和代码可维护性。 **AOP术语详解** 1. **Aspect**:切面是AOP的核心概念,它封装了特定的横切...

    hualinux spring 3.15:Spring AOP.pdf

    此外,需要在Spring的Bean配置文件中添加&lt;aop:aspectj-autoproxy&gt;元素以启用AspectJ注解的支持。 5. 声明AspectJ切面 要在Spring中声明AspectJ切面,需要在IOC容器中将切面声明为Bean实例。一旦在Spring IOC容器中...

    第二章:Spring AOP 基础1

    这些知识点构建了Spring AOP的基础,通过这些,开发者可以灵活地实现横切关注点的解耦,提高代码的可维护性和复用性。在实际开发中,可以根据项目需求选择注解驱动或XML配置驱动的方式来实现AOP功能。

    AspectJ in Action: Enterprise AOP with Spring Applications

    #### 关键知识点概述 1. **Spring-AspectJ集成:**本书重点介绍了Spring框架与AspectJ相结合的技术优势及其在企业级应用中的强大功能。 2. **面向切面编程(AOP):**深入探讨了AOP的概念、原理及其实现方式,特别是...

    spring AOP 理论知识点总结.wps

    spring AOP 理论知识点总结.wpsspring AOP 理论知识点总结.wpsspring AOP 理论知识点总结.wps

    spring AOP 引入jar包,spring IOC 引入Jar包

    **Spring AOP 知识点:** 1. **概念理解**:AOP 是一种编程范式,它将关注点分离,让通用的横切关注点(如日志、事务管理)与业务逻辑解耦。在 Spring 中,切面可以通过注解或 XML 配置定义。 2. **通知类型**:...

    spring aop所需jar包

    下面将详细介绍Spring AOP的关键知识点以及与其相关的jar包。 1. **AOP概念**: - **切面(Aspect)**:AOP的核心概念,包含了横切关注点和通知(advice)。 - **横切关注点(Cross-cutting Concerns)**:应用中...

    springAOP配置动态代理实现

    1. **XML配置**:在Spring的配置文件中,可以通过&lt;aop:config&gt;标签来定义切面,&lt;aop:pointcut&gt;定义切点,&lt;aop:advisor&gt;或&lt;aop:aspect&gt;定义通知。例如: ```xml &lt;aop:config&gt; &lt;aop:pointcut id="myPointcut" ...

    SpringAOP.zip

    Spring AOP,全称为Aspect Oriented Programming,是Spring框架中的一个重要模块,主要负责处理系统中的...文件"5.SpringAOP_01"和"6.SpringAOP_02"很可能是课程的分阶段内容,涵盖了从基础概念到进阶实践的详细讲解。

    spring aop4.3.10

    在Spring AOP 4.3.10中,我们主要关注以下几个关键知识点: 1. **切面(Aspect)**:切面是AOP的核心概念,它封装了多个相关操作,包括通知(Advice)、引入(Introduction)、目标对象(Target Object)、织入...

    jar包---Spring AOP 还需.rar

    下面我们将详细探讨这些知识点。 首先,Spring AOP的核心概念包括切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和代理(Proxy)。切面是封装一组相关或相互关联的横切关注点的模块化...

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    上述知识点覆盖了Spring AOP的基本概念、核心组件以及如何通过配置来创建和使用代理对象。通过这些知识的学习和应用,可以更好地实现业务逻辑与非业务逻辑代码的分离,提高代码的可维护性和可重用性。

    spring AOP入门教程

    1. **XML配置**:在`&lt;aop:config&gt;`标签中定义切面,`&lt;aop:advisor&gt;`定义通知,`&lt;aop:pointcut&gt;`定义切入点。 2. **注解驱动**:使用`@Aspect`注解声明切面类,`@Before`、`@After`、`@Around`、`@AfterReturning`、...

    spring aop使用教程

    下面是关于 Spring AOP 使用教程的详细知识点。 什么是 AOP? AOP 是一种编程技术,它能够帮助开发者在软件系统中实现一些通用的功能,如日志记录、安全检查、事务管理等。AOP 的主要思想是将这些通用的功能从业务...

    Spring aop使用探究实例

    Spring AOP,全称为Spring...了解并熟练掌握这些知识点,能帮助开发者更好地利用Spring AOP来设计和实现高效、解耦的系统。在实际项目中,合理地使用AOP可以极大地提高代码的复用性和可维护性,同时降低系统的复杂度。

    Spring AOP的底层实现技术

    下面我们将深入探讨Spring AOP的底层实现技术和相关知识点。 1. **代理模式** Spring AOP基于两种代理机制实现:JDK动态代理和CGLIB代理。JDK动态代理适用于实现了接口的目标对象,通过反射机制创建一个代理类来...

    spring Aop文档

    ### Spring AOP 文档知识点详解 #### 一、Spring AOP 概述 Spring AOP(面向切面编程)是Spring框架中的一个关键模块,它为开发者提供了在应用程序中实现横切关注点(Cross-cutting Concerns)的能力。横切关注点...

    Spring的Hello World:理解AOP

    **Spring AOP基础知识** 1. **AOP概念**:AOP的核心是切面(Aspect),它封装了横切关注点,如日志、异常处理等。这些关注点通常分散在应用程序的多个类和方法中。AOP通过代理模式来实现,可以将切面逻辑织入到应用...

    spring aop的jar包

    下面将详细阐述Spring AOP涉及的知识点及其相关jar包的作用。 首先,我们来看压缩包中包含的关键jar文件: 1. **aspectjweaver.jar**:这是AspectJ的织入器,负责在运行时动态地将切面代码插入到目标类中。AspectJ...

    SpringAOP简单项目实现

    本项目实现了Spring AOP的基本概念和操作,以下是对相关知识点的详细说明: 一、AOP核心概念 1. 切面(Aspect):切面是关注点的模块化,它封装了横切关注点,如日志、事务管理等。 2. 连接点(Join Point):程序...

Global site tag (gtag.js) - Google Analytics