Spring Aop XML第二种配置例子

原创 2018年04月17日 12:07:29

第二个例子:AOP

编写目标类与切面类

public class Waiter{

public String greetTo(String name) {

System.out.println("这是目标类 name="+name);

return "erer";

}

}

public class SectionAdvice{

public void before(){

System.out.println("before");

}

public void after(){

System.out.println("after");

}

 

}

 

Xml配置

<?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:aop="http://www.springframework.org/schema/aop" 

  xmlns:tx="http://www.springframework.org/schema/tx" 

  xsi:schemaLocation="

      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 

<!-- 目标类 -->

   <bean id="waiter" class="com.aop2.Waiter"/>

   <!-- 定义切面类 -->

   <bean id="sectionAdvice" class="com.aop2.SectionAdvice"/>

<!-- 前置通知 -->

<aop:config>

<!-- 自动注入切面类  -->

<aop:aspect ref="sectionAdvice">

<!-- 切点 -->

<aop:pointcut id="service" expression="execution(* com.aop.Waiter.*(..))" />

<!--

execution(* com.aop2.*.*(..))"

第一个*代表所有的返回值类型

第二个*代表所有的类

第三个*代表类所有方法

最后一个..代表所有的参数。

-->

<!-- 通知 -->

<aop:before pointcut-ref="service" method="before" />

<aop:after pointcut-ref="service" method="after"  />

</aop:aspect>

</aop:config>

</beans>  

 

前置通知(Before advice):在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在<aop:aspect>里面使用<aop:before>元素进行声明。例如,TestAspect中的doBefore方法。

后置通知(After advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。ApplicationContext中在<aop:aspect>里面使用<aop:after>元素进行声明。例如,ServiceAspect中的returnAfter方法,所以Teser中调用UserService.delete抛出异常时,returnAfter方法仍然执行。

环绕通知(Around advice):包围一个连接点的通知,类似WebServlet规范中的FilterdoFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。ApplicationContext中在<aop:aspect>里面使用<aop:around>元素进行声明。例如,ServiceAspect中的around方法。

抛出异常后通知(After throwing advice):在方法抛出异常退出时执行的通知。ApplicationContext中在<aop:aspect>里面使用<aop:after-throwing>元素进行声明。例如,ServiceAspect中的returnThrow方法。

返回后通知(After return advice):在某连接点正常完成后执行的通知,不包括抛出异常的情况。ApplicationContext中在<aop:aspect>里面使用<after-returning>元素进行声明。

AOP术语:

AOPAspect Oriented Programing 的简称,翻译:面向切面编程

增强Advice):增强是织入到目标连接点上的一段程序代码。

织入(Weaving):织入是将增强添加对目标具体连接点上的过程,AOP像一台织布机,将目标、增强通过AOP这台织布机天衣无缝地编织到一起。

连接点(joinpoint):程序执行的某个特定位置:如类开始初始化前、类初始化后、类某个方法调用前、调用后、方法抛出异常后。

切点:每个程序类都拥有多个连接点,如一个拥有两个方法的类,这两个方法都是连接点。但是这为数众多的连接点中,如何定位到某个感兴趣的连接点上呢?AOP通过”切点”定位特定连接点。一句话:切点就是指定的连接点。

代理:一个类被AOP织入增强后,将产生了一个结果类,它是融合了原类和增强逻辑的代理类。根据不同的代理方法,代理类既可能是和原类具有相同接口的类,也可能就是原类的子类,所以我们可以采用调用原类相同的方式调用代理类。

切面:切面由切点和增强组成,它既包括了增强的定义,也包括了连接点的定义。Spring AOP 就是负责实施切面的框架,它将切面所定义的增强织入到切点(指定的连接点)中。

为什么需要面向切面编程?

我们现在做的一些非业务,如:日志、事务、安全等都会写在业务代码中(也即是说,这些非业务类横切于业务类),但这些代码往往是重复,复制——粘贴式的代码会给程序的维护带来不便,AOP就实现了把这些业务需求与系统需求分开来做。这种解决的方式也称代理机制。(想要学习更多的后台基础的可搜索博客号:weixin_41920152


 

hibernate4_基于xml和annotation两种配置方式

-
  • 1970年01月01日 08:00

实例说明Spring实现AOP的2种方式(注解和XML配置)

本文说到spring的配置,常见的有两种:注解方式和xml文件配置方式 首先, 建立model类UserManager,代码如下: package com.spring.model; publi...
  • u013337889
  • u013337889
  • 2015-10-14 10:35:45
  • 486

spring AOP 之 xml 配置实现(附 Java 代码实例)

首先这个配置模式估计现在已经不用了,因为我在我们公司的项目里面并没有看到这么配置AOP相关的东西。虽然公司项目使用的是3.1,而我学习的这个版本是2.5。 不过,这个就和学习spring的控制反转(I...
  • qq_27093465
  • qq_27093465
  • 2016-11-27 22:07:53
  • 3001

Spring Aop实例之xml配置

上篇博客《3幅图让你了解Spring AOP》中介绍了aop通知类型,AOP的配置方式有2种方式:xml配置和AspectJ注解方式。今天我们就来实践一下xml配置方式。...
  • xiaoxian8023
  • xiaoxian8023
  • 2013-12-19 08:49:40
  • 37589

【Spring aop】Spring aop的XML和注解的两种配置实现

一:XML形式配置
  • flysun3344
  • flysun3344
  • 2016-06-15 11:42:19
  • 5438

Spring的AOP基于xml常用的几种配置

一般spring的AOP实现方式有二中 1、spring-aop自己实现与IOC结合使用,也是我们最常用的方式 2、使用AspectJ,即注解的方式 个人觉得,spring中使用配置文件还是比较...
  • u011955252
  • u011955252
  • 2016-10-27 14:10:05
  • 1428

Spring AOP面向切面编程详解(基于XML方式 注解方式 注入Aspectj方式)

AOP:即面向切面编程,是一种编程思想,OOP的延续。在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等。耐心看完本篇文章,会对理解AOP有一定的帮助。1.了解AOP相关术语(如有...
  • RobertoHuang
  • RobertoHuang
  • 2017-04-12 22:38:40
  • 9835

SSM框架项目搭建系列(六)—Spring AOP之基于XML的声明式AspectJ

AOP通过“横切”技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,将其命名为Aspect,即切面。切面就是将那些与业务无关(例如:权限认证、日志、事务处理),确为业务模...
  • YEN_CSDN
  • YEN_CSDN
  • 2016-11-02 22:19:58
  • 1439

Spring Xml文件配置实现AOP通知

在前一篇文章,我们讲述了注解实现AOP的通知,这一片,我们看一下,xml文件...
  • yezis
  • yezis
  • 2014-04-26 01:45:49
  • 1437

Spring -- 基于XML的AOP通知配置

上一篇博客,我们学习了基于注解配置AOP。下面我们基于XML来配置AOP。看代码public interface Calculation { public int add(int x, int ...
  • u010926176
  • u010926176
  • 2015-07-30 16:06:18
  • 1341
收藏助手
不良信息举报
您举报文章:Spring Aop XML第二种配置例子
举报原因:
原因补充:

(最多只允许输入30个字)