`
ajax_xu
  • 浏览: 154770 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

spring 基本感念

 
阅读更多
《Spring参考手册》中定义了以下几个AOP的重要概念,结合以上代码分析如下:
切面(Aspect) :官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,在本例中,“切面”就是类TestAspect所关注的具体行为,例如,AServiceImpl.barA()的调用就是切面TestAspect所关注的行为之一。“切面”在ApplicationContext中<aop:aspect>来配置。
连接点(Joinpoint) :程序执行过程中的某一行为,例如,AServiceImpl.barA()的调用或者BServiceImpl.barB(String _msg, int _type)抛出异常等行为。
通知(Advice) :“切面”对于某个“连接点”所产生的动作,例如,TestAspect中对com.spring.service包下所有类的方法进行日志记录的动作就是一个Advice。其中,一个“切面”可以包含多个“Advice”,例如TestAspect
切入点(Pointcut) :匹配连接点的断言,在AOP中通知和一个切入点表达式关联。例如,TestAspect中的所有通知所关注的连接点,都由切入点表达式execution(* com.spring.service.*.*(..))来决定
目标对象(Target Object) :被一个或者多个切面所通知的对象。例如,AServcieImpl和BServiceImpl,当然在实际运行时,Spring AOP采用代理实现,实际AOP操作的是TargetObject的代理对象。
AOP代理(AOP Proxy) 在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理,例如,AServiceImpl;反之,采用CGLIB代理,例如,BServiceImpl。强制使用CGLIB代理需要将 <aop:config> 的 proxy-target-class 属性设为true
       通知(Advice)类型
前置通知(Before advice) :在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在<aop:aspect>里面使用<aop:before>元素进行声明。例如,TestAspect中的doBefore方法
后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。ApplicationContext中在<aop:aspect>里面使用<aop:after>元素进行声明。例如,TestAspect中的doAfter方法,所以AOPTest中调用BServiceImpl.barB抛出异常时,doAfter方法仍然执行
返回后通知(After return advice) :在某连接点正常完成后执行的通知,不包括抛出异常的情况。ApplicationContext中在<aop:aspect>里面使用<after-returning>元素进行声明。
环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。ApplicationContext中在<aop:aspect>里面使用<aop:around>元素进行声明。例如,TestAspect中的doAround方法。
抛出异常后通知(After throwing advice) : 在方法抛出异常退出时执行的通知。 ApplicationContext中在<aop:aspect>里面使用<aop:after-throwing>元素进行声明。例如,TestAspect中的doThrowing方法。
       切入点表达式
通常情况下,表达式中使用”execution“就可以满足大部分的要求。表达式格式如下:
Java代码 
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) 
modifiers-pattern:方法的操作权限
ret-type-pattern:返回值
declaring-type-pattern:方法所在的包
name-pattern:方法名
parm-pattern:参数名
throws-pattern:异常
其中,除ret-type-pattern和name-pattern之外,其他都是可选的。上例中,execution(* com.spring.service.*.*(..))表示com.spring.service包下,返回值为任意类型;方法名任意;参数不作限制的所有方法。
通知参数
可以通过args来绑定参数,这样就可以在通知(Advice)中访问具体参数了。例如,<aop:aspect>配置如下
Java代码 
<aop:config> 
    <aop:aspect id="TestAspect" ref="aspectBean"> 
        <aop:pointcut id="businessService" 
            expression="execution(* com.spring.service.*.*(String,..)) and args(msg,..)" /> 
            <aop:after pointcut-ref="businessService" method="doAfter"/> 
    </aop:aspect> 
</aop:config> 
TestAspect的doAfter方法中就可以访问msg参数,但这样以来AService中的barA()和BServiceImpl中的barB()就不再是连接点,因为execution(* com.spring.service.*.*(String,..))只配置第一个参数为String类型的方法。其中,doAfter方法定义如下:
Java代码 
public void doAfter(JoinPoint jp,String msg) 
  访问当前的连接点
任何通知(Advice)方法可以将第一个参数定义为 org.aspectj.lang.JoinPoint 类型。JoinPoint 接口提供了一系列有用的方法, 比如 getArgs() (返回方法参数)、getThis() (返回代理对象)、getTarget() (返回目标)、getSignature() (返回正在被通知的方法相关信息)和 toString() (打印出正在被通知的方法的有用信息。
分享到:
评论

相关推荐

    spring最基本jar

    这个名为“spring最基本jar”的压缩包很可能包含了Spring框架的基础组件,让我们来详细探讨一下Spring框架的相关知识点。 1. **IoC容器**:Spring的核心是IoC容器,它负责管理对象的生命周期和依赖关系。通过配置...

    spring 基本包 jar

    "spring 基本包 jar"指的是Spring框架的核心组件,这些组件构成了Spring应用程序的基础。下面我们将深入探讨Spring的基本包及其核心概念。 1. **IoC(Inversion of Control)容器**:Spring的核心是IoC容器,它负责...

    SpringCloud基本框架+完整示例工程.rar

    本压缩包文件“SpringCloud基本框架+完整示例工程”提供了全面的学习资源,帮助开发者快速理解和上手SpringCloud。 1. **SpringCloud Eureka**:作为服务发现组件,Eureka实现了服务注册与发现的功能。服务提供者在...

    spring操作的基本jar包

    在给定的压缩包文件中,包含了一系列Spring的核心组件,这些组件是进行基本Spring开发所必需的。以下是对这些jar包及其作用的详细解释: 1. **spring-context-4.2.3.RELEASE.jar**:这是Spring上下文模块的实现,...

    spring基本包

    spring Ioc基本包.rar中包含commons-logging-1.2.jar,log4j-1.2.16.jar,spring-beans-4.2.4.RELEASE.jar,spring-context-4.2.4.RELEASE.jar,spring-core-4.2.4.RELEASE.jar,spring-expression-4.2.4.RELEASE....

    spring安装基本包.zip

    "spring安装基本包.zip"是一个包含Spring框架基础组件的压缩包,适用于初学者或者需要快速搭建Spring环境的开发者。在Java Spring开发中,正确安装和配置这些基本包至关重要。 首先,让我们来了解一下什么是IOC...

    编码剖析Spring装配基本属性的原理

    本文将深入探讨Spring装配基本属性的原理,帮助你更好地理解如何在代码中使用和配置这些属性。 首先,Spring装配的基本方式有两种:XML装配和基于注解的装配。XML装配是早期版本Spring的主要装配方式,通过`&lt;bean&gt;`...

    spring基本jar包

    spring-beans-4.2.4.RELEASE.jar spring-context-4.2.4.RELEASE.jar spring-core-4.2.4.RELEASE.jar spring-expression-4.2.4.RELEASE.jar 核心容器依赖的日志包 commons-logging-1.1.3.jar log4j-1.2.17.jar ...

    Spring 基础jar包

    Spring的基础jar包包含了运行Spring应用程序所需的核心组件,使得开发者能够快速搭建Spring环境并开始使用其基本功能。下面我们将深入探讨Spring框架的一些核心知识点。 1. **依赖注入(Dependency Injection, DI)...

    基本的spring mvc + spring security实现的登录(无数据库)

    在本项目中,我们主要探讨的是如何利用Spring MVC和Spring Security框架构建一个基本的无数据库登录系统。Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的...

    java_spring基本教程

    java_spring基本教程

    实验一 Springioc基本操作.docx

    "Spring IOC基本操作" Spring IOC(Inversion of Control,控制反转)是一种软件设计模式,它将对象的创建和管理交给容器,实现了对象之间的解耦合。 SpringIOC是Spring Framework中的核心组件之一,负责管理应用...

    spring-framework基本包

    9. **Spring Boot**:虽然不在“spring-framework基本包”内,但 Spring Boot 是基于 Spring 框架的快速开发工具,它简化了 Spring 应用的初始搭建以及配置过程,引入了“起步依赖”概念,使得开发者能够快速构建...

    SpringBlade开发手册基础版

    * 声明式服务调用:使用SpringBlade可以快速实现声明式服务调用,通过简单的步骤可以生成一个基本的微服务系统平台。 * Feign熔断机制:使用SpringBlade可以快速实现Feign熔断机制,通过简单的步骤可以生成一个基本...

    spring v3.2源码

    spring3.2的源代码,至于为什么要下载spring3.2的源代码呢?...虽然每个版本之间有差别,由于我们想要研究的都是spring的一些基本的功能,关于baen解析,bean注入,aop啥的,这些基本的功能每个版本之间差别是非常小的。

    Spring Boot整合Spring Batch,实现批处理

    在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...

    spring2.0升级到spring3.0.5的开发包

    Spring框架是Java应用程序开发中的一个核心组件,它提供了一个丰富的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)功能,使得开发者能够更方便地管理对象和实现模块化...

    SpringTest_springtest_spring_java_Framework_

    描述中的“简单小应用,实现了一些基本的功能”可能是指一个基础的Spring项目,包含了核心的IoC容器和一些基本的bean配置。这样的项目通常会涉及创建Bean、声明Bean之间的依赖关系,以及可能的事务管理等。 标签中...

    spring security3基本包

    spring security3.0.5的5个jar包,分别为: spring-security-acl-3.0.5.RELEASE.jar spring-security-config-3.0.5.RELEASE.jar spring-security-core-3.0.5.RELEASE.jar spring-security-taglibs-3.0.5.RELEASE...

Global site tag (gtag.js) - Google Analytics