JAVA-Spring AOP详解

Posted xiaoluohao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA-Spring AOP详解相关的知识,希望对你有一定的参考价值。

1.Spring AOP中的基本概念

  连接点Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。

    通俗的讲:

       层与层之间调用的过程中,目标层中可供调用的方法,就称之为连接点。

 

 

  切入点Pointcut):匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。

    通俗的讲:

       在连接点的基础上,增加了切入规则,选择出需要进行增强的连接点,这些基于切入规则选出来的连接点就称之为切入点。

 

 

  切面Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在Spring AOP中,切面可以使用基于模式,或者基于@Aspect注解的方式来实现。

    通俗的讲:

       狭义上就是,当Spring拦截下切入点后,将这些切入点交给处理类进行功能的增强,这个处理类就称之为切面。

       广义上来讲,讲Spring底层的代理切入点和处理类加在一起实现的对层与层之间调用过程进行增强的机制,称之为切面。

 

 

  通知Advice):在切面的某个特定的连接点上执行的动作。其中包括了"around"、"before"和"after"等不同类型的通知(通知的类型在后面部分会讨论)。许多AOP框架(包括Spring)都是以来拦截器做通知模型,并维护一个一连接点为中心的拦截器链。

    通俗的讲:

       在Spring底层的代理拦截下切入点后,将切入点交给切面类,切面类中就要有处理这写切入点的方法,这些过程就称之为通知(也叫增强 增强方法)。正对于切入点执行的过程,通知还分为不同的类型,分别关注切入点在执行过程中的不同的时机。

 

 

  目标对象Target Object):被一个或者多个切面所通知的对象,也被称之为 被通知(advised)对象。既然Spring AOP是通过运行时代理实现的,这个对象永远是一个被代理(Proxied)对象。

    通俗的讲:

       就是真正希望被访问到的对象。Spring底层的动态代理对他进行了代理,具体能不能真的访问到目标对象,或在目标对象真正执行之前和之后是否做一些额外的操作,取决于切面。

技术图片

 

 2.Spring的AOP入门案例

  a.导入aop相关开发包

     技术图片

  b.创捷一个切面类

    技术图片

  c.定义通知

    技术图片

  d.定义一个连接点

  技术图片

  e.配置连接点

    在MyEclipse中导入aop的schema约束文件,以便于在配置文件中可以提示标签。

    在其中配置切入点:

    技术图片

  f.定义切面

     技术图片

  g.执行方法,发现切面确实起作用

    技术图片

 

3.切入点表达式

  a.within表达式

    通过类名进行匹配 粗粒度的切入点表达式

      within(包名.类名)

    则这个类中的所有的连接点都会被表达式识别,成为切入点。

    技术图片

    在within表达式中可以使用*号匹配符,匹配指定包下所有的类,注意,只匹配当前包,不包括当前包的子孙包。

    技术图片

    在within表达式中也可以用*号匹配符,匹配包

     技术图片

    在within表达式中也可以使用..*匹配符,匹配指定包下及其子孙包下的所有类

    技术图片

    b.  execution()表达式

         细粒度的切入idan表达式,可以以方法为单位定义切入点规则

      语法:execution(返回值类型   包名.类名.方法名(参数列表,参数类型。。。))

        技术图片

 

 

      

以上是关于JAVA-Spring AOP详解的主要内容,如果未能解决你的问题,请参考以下文章

JAVA-Spring框架之IOC(DI)

Java-Spring-获取Request,Response对象

Java-Spring JDBC初体验

Java-Spring JDBC初体验

java-Spring 管理bean例子

Java-Spring-获取Request,Response对象