前面学习了如何用注解的方式去配置Spring aop,今天把XML配置的方法也看了下,下面顺便也做了个记录

先把spring中用xml配置aop的配置元素给贴出来:

  • <aop:advisor> 定义AOP通知器
  • <aop:after> 定义AOP后置通知(不管被通知的方法是否执行成功)
  • <aop:after-returning> 定义AOP返回通知
  • <aop:after-throwing> 定义AOP异常通知
  • <aop:around> 定义AOP环绕通知
  • <aop:aspect> 定义一个切面
  • <aop:aspectj-autoproxy> 启用 @AspectJ 注解驱动的切面
  • <aop:before> 定义一个AOP前置通知
  • <aop:config> 顶层的AOP配置元素。大多数的 <aop:*> 元素必须包含在 <aop:config> 元素内
  • <aop:declare-parents> 以透明的方式为被通知的对象引入额外的接口
  • <aop:pointcut> 定义一个切点

还是先创一个接口类:

public interface Song {
void song();
}

接口实现类:

public class ManMan implements Song {

    public void song() {
System.out.println("下面这首歌是张学友的《慢慢》");
}
}

下面就是需需要定义的一个类,写通知的时候需要调用的方法

public class VocalConcert {

    public void checking() {
System.out.println("检票之后,找位子坐下");
} public void beautiful() {
System.out.println("演唱会进入精彩部分的时候,鼓掌!");
} public void leave() {
System.out.println("结束后,我们离开场地");
} public void watchVocalConcert(ProceedingJoinPoint joinPoint) {
try {
System.out.println("检票之后,找位子坐下");
joinPoint.proceed();
System.out.println("演唱会进入精彩部分的时候,鼓掌!");
System.out.println("结束后,我们离开场地");
} catch (Throwable throwable) {
System.out.println("效果不好,退票");
} }
}

好了,上面有已经有一个实现类,我们要让他可以实现自动注入,同时通知的类也要注入

然后就要配置 配置的切片什么时候通知消息了:

<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <bean id="vocalConcert" class="com.aop.test2.VocalConcert" /> <bean class="com.aop.test2.ManMan" id="manMan"/> <!--一般的前后通知消息 -->
<aop:config>
<aop:aspect ref="vocalConcert">
<!-- vocalConcert 实现类调用之前,实现的方法 -->
<aop:before pointcut="execution(* com.aop.test2.Song.song(..))" method="checking"/>
<!-- vocalConcert 实现类调用之后,实现的方法 -->
<aop:after pointcut="execution(* com.aop.test2.Song.song(..))" method="beautiful"/>
<!-- vocalConcert 实现类调用结束,返回的时候,实现的方法 -->
<aop:after-returning pointcut="execution(* com.aop.test2.Song.song(..))" method="leave"/> <!-- 同一个切片,定一个id 调用的方法-->
<!-- <aop:pointcut id="song" expression="execution(* com.aop.test2.Song.song(..))"/>
<aop:before pointcut-ref="song" method="checking"/>
<aop:after pointcut-ref="song" method="beautiful"/>
<aop:after-returning pointcut-ref="song" method="leave"/>-->
</aop:aspect>
</aop:config> <!--环绕通知 -->
<aop:config>
<aop:aspect ref="vocalConcert">
<aop:pointcut id="song" expression="execution(* com.aop.test2.Song.song(..))"/>
<aop:around method="watchVocalConcert" pointcut-ref="song"/>
</aop:aspect>
</aop:config> </beans>

测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("config.xml")
public class VocalConcertTest { @Autowired
Song mm; @Test
public void log() {
mm.song();
} }

这就是简单的XML配置spring aop的方法,当然还有,还有带参数的xml配置,其主要定义的切点的时候不同,假设song()的方法是要传入参数的,参数类型为String,那么配置应该如下:

 <aop:config>
<aop:aspect ref="vocalConcert">
<aop:pointcut id="song" expression="execution(* com.aop.test2.Song.song(String) )and args(song)" />
</aop:aspect>
</aop:config>

主要就是 expression="execution(* com.aop.test2.Song.song(String) )and args(song)" 这边需要更改,跟前面用注解配置没有多大的区别

当然这个时候所对应的bean也要带参数,这个前面就学过,就不记录了。

代码:https://github.com/eoooxy/springinaction test下 的com.aop.test2 中

SpringInAction--XML配置Spring Aop的更多相关文章

  1. Spring使用AspectJ注解和XML配置实现AOP

    本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project首先是位于classpath下的applicationC ...

  2. Spring学习笔记之二----基于XML的Spring AOP配置

    在Spring配置文件中,通常使用<aop:config>元素来设置AOP,其中应包括: <aop:aspect>指定aspect,aspect是一个POJO类,包含了很多的a ...

  3. 使用Spring框架入门三:基于XML配置的AOP的使用

    一.引入Jar包 <!--测试1使用--> <dependency> <groupId>org.springframework</groupId> &l ...

  4. 关于xml配置实现AOP的小知识

    除了前面介绍的基于JDK1.5的注解方式来定义切面,切入点和增强处理外,Spring AOP也允许直接使用XML配置文件来管理它们.在JDK1.5之前,只能使用配置文件的方式来管理,在Spring2. ...

  5. 基于@AspectJ配置Spring AOP之一--转

    原文地址:http://tech.it168.com/j/2007-08-30/200708302209432.shtml 概述 在低版本Spring中定义一个切面是比较麻烦的,需要实现特定的接口,并 ...

  6. SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP

    AOP(Aspect Oriented Programming),是面向切面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP之所以能得到广泛应用,主要是因为它将应用系统拆分分了2个部分 ...

  7. 怎样配置spring aop

    1.spring aop配置如下: 1.aspect切面是一个具体类,里面包含各种执行的通知方法.切面类也要注册到ioc容器中. 2.切入点pointcut,可以在每个通知里单独配置,即每个通知可以指 ...

  8. XML配置spring session jdbc实现session共享

    概述 session的基础知识就不再多说. 通常,我们会把一个项目部署到多个tomcat上,通过nginx进行负载均衡,提高系统的并发性.此时,就会存在一个问题.假如用户第一次访问tomcat1,并登 ...

  9. Spring XML配置实现AOP

    1:  首先我们要定义 配置成切面的类 package cn.gbx.example; import org.aspectj.lang.ProceedingJoinPoint; import org. ...

随机推荐

  1. Ubuntu12.04 安装adb

    1.通过apt-get安装adb sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt-get update sudo apt-get i ...

  2. 再也不学AJAX了!(一)AJAX概述

    "再也不学AJAX了"是一个与AJAX主题相关的文章系列,包含以下三个部分的内容: AJAX概述:主要回答"AJAX是什么"这个问题: 使用AJAX:介绍如何通 ...

  3. 【读书笔记】《深入浅出nodejs》第一章 Node简介

    1. Node的官方网站: http://nodejs.org 2. Node的缘起: Ryan Dahl 打算设计一个高性能的Web服务器. Ryan Dahl 认为设计高性能Web服务器的要点在于 ...

  4. SpringMVC HttpMessageConverter 匹配规则

    以下内容,如有问题,烦请指出,谢谢! SpringMVC启动时会自动配置一些HttpMessageConverter,接收到http请求时,从这些Converters中选择一个符合条件的来进行Http ...

  5. [BZOJ3733]Iloczyn

    Description 给定正整数n和k,问能否将n分解为k个不同正整数的乘积 Input 第一行一个数T(T<=4000)表示测试组数 接下来T行每行两个数n(n<=10^9),k(k& ...

  6. rocketmq总结(消息的高可用、中间件选型)

    rocketmq总结(消息的高可用.中间件选型) 参考: https://blog.csdn.net/meilong_whpu/article/details/76922456 http://blog ...

  7. IO模型详解

    IO编程包括: 文件读写 操作 StringIO 和 BytesIO 内存中 操作文件和目录 OS 序列化 json pickling 操作系统内核空间(缓冲区)收发数据: 内核态(内核空间)---- ...

  8. 关于Vue的component制作dialog组件

    其实原理很简单,兴个粟子, 点击按钮出现 dialog 弹出杠, 将dialog做成一个组件,components/dialog.vue 就是在components里面新建一个vue.将这个vue做为 ...

  9. PHP5.6版本安装redis扩展

    一.php安装redis扩展   1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本       2.根据PHP版本号,编译器版本号和CPU架构, 选择php_redis-2.2 ...

  10. 数组中的k个最小值

    问题:输入n个整数,找出其中最小的k个数. 方案一:将输入的n个整数进行排序,输出前k个数即为所求的k个最小数.时间复杂度为O(nlogn). 方案二:创建一个大小为k的容器,来存储最小的k个数.遍历 ...