1.分析

     1>首先我们有一个Service需要增强 将Service增加一个日志(Logger)
          2>写了一个日志的通知并且它可以对Service进行日志增强
          3>配了一个切面并且切面在引用logger这个通知  
          4>并明确告诉printlog要对execution中的方法增强 怎么增强就是2种创建代理对象的过程

2.ApplicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置spring的IOC,把service对象配置进来 -->
<bean id="acctionService" class="com.hdh.service.impl.AccountServiceImpl"></bean> <!--spring中基于XML的AOP配置步骤
1.把bean通知也交给spring来管理
2.使用aop:config标签表明开始的AOP的配置
3.使用aop:aspect标签表明配置切面
id:是给切面提供一个
ref:是指定通知类bean的id
4.在aop:aspect标签的内部使用对应标签来配置通知类型
5.我们现在是让printLog方法在切入点执行之前,所以是前置通知
<aop:before></aop:before>
method属性:用于指定Logger中那个类中的那个方法是前置通知
6.切入点表达式的写法
                关键字:execution    
                 标准写法  表达式: 访问修饰符 返回值  包名...包名。方法名(参数列表)   
              public void com.hdh.service.impl.AccountServiceImpl.saveAccount()
              
    全通配写法:           *        *..*     .*          (..)
    修饰符可以省略     返回值任意     任意包下的      任意方法        参数任意
                                                    int 返回值为int
                                                     *返回值任意但必须有
通常配法:* com.hdh.service.impl.*.*(..) 表示包com.hdh.service.impl下同子包下所有返回值任意、类任意、方法任意、参数任意 都视为切入点
-->
<!--配置Logger -->
<bean id="logger" class="com.hdh.utils.Logger"></bean> <!--配置AOP -->
<aop:config>
<!--配置切面 -->
<aop:aspect id="logAdvice" ref="logger">
<!--配置通知的类型,并且建立通知方法和切入点方法的关联
printlog在增强之前执行 (aop:before)
<aop:before method="printlog" pointcut="execution(public void com.hdh.service.impl.AccountServiceImpl.saveAccount())"/>
</aop:aspect>
</aop:config> </beans>

3种常用的通知类型

<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd"> <!--配置spring的IOC,把service对象配置进来 -->
<bean id="acctionService" class="com.hdh.service.impl.AccountServiceImpl"></bean>
<bean id="logger" class="com.hdh.utils.Logger"></bean>
<!--配置AOP -->
<aop:config>
        <!--  
            切入点通配表达式  pointcut_ref 引入
            作用范围更具 <aop:pointcut>配置的位置决定
            <aop:aspect>中作用范围就在<aop:aspect>    
            <aop:config>内作用范围则是整个切面中 但是必须在配置切面之前
             -->
            <aop:pointcut  id="pt1" expression="execution(* com.hdh.service.impl.*.*(..))"/>
<!--配置切面 -->
<aop:aspect id="beforePrintlog" ref="logger">
<!--配置前置通知,在切入点方法执行之前执行-->
<aop:before method="beforePrintlog" pointcut-ref="pt1" />
<!--配置后置通知,在切入点方法正常执行之后执行 -->
<aop:after-returning method="afterReturningPrintlog" pointcut-ref="pt1"/>        <!--配置异常通知,在切入点方法执行产生异常之后执行-->
       <aop:after-throwing method="exceptionPrintlog" pointcut="execution(* com.hdh.service.impl.*.*(..))" />         <!--配置最终通知,无论切入点方法是否正常执行,它都会最后执行 -->
       <aop:after method="afterPrintlog" pointcut="execution(* com.hdh.service.impl.*.*(..))" /> </aop:aspect> </aop:config> </beans>

4.配置一个log文件的前置通知

<bean id="acctionService" class="com.hdh.service.impl.AccountServiceImpl"></bean>
<!-- 配置log类 -->
<bean id="logger" class="com.hdh.service.impl.PrintLog"></bean>
<!--使用aop:config标签开始AOP配置 -->
<!--<aop:aspect>配置切面 -->
<aop:config>
<!--配置切面 -->
<aop:aspect id="logAdvice" ref="logger">
<!--配置通知类型 -->
<aop:before method="prientLog" pointcut="execution(* com.hdh.service.impl.*.*(..))" />
</aop:aspect>
<aop:aspect>
<!-- ..... -->
</aop:aspect>
</aop:config>

TZ_05_Spring_基于AOP的xml配置的更多相关文章

  1. Spring中基于AOP的XML架构

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/aop-with-spring-framenwork/xml-schema-based-aop-wi ...

  2. Spring 中基于 AOP 的 XML架构

    Spring 中基于 AOP 的 XML架构 为了使用 aop 命名空间标签,你需要导入 spring-aop j架构,如下所述: <?xml version="1.0" e ...

  3. Spring AOP-xml配置

    在spring AOP(一)中介绍了AOP的基本概念和几个术语,现在学习一下在XML中如何配置AOP. 在XML中AOP的配置元素有以下几种: AOP配置元素 描述 <aop:config> ...

  4. Spring AOP之xml 配置实现

    首先这个配置模式估计现在已经不用了,因为我在我们公司的项目里面并没有看到这么配置AOP相关的东西.不过,这个就和学习spring的控制反转(IOC)和依赖注入(DI)一样,刚刚开始的时候,都是从简单的 ...

  5. day39-Spring 11-Spring的AOP:基于AspectJ的XML配置方式

    package cn.itcast.spring3.demo2; import org.aspectj.lang.ProceedingJoinPoint; /** * 切面类 * @author zh ...

  6. Spring3实战第一章 Aop 切面 XML配置

    刚看spring3实战书籍第一章  切面以前没有关注过 现在看到了  随手试验一下 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Objec ...

  7. spring中aop以xml配置方式

    1 引jar包 springAOP\aopalliance.jar springAOP\aspectjrt.jar springAOP\aspectjweaver.jar springAOP\spri ...

  8. 【Spring四】AOP之XML配置

    AOP:Aspect Oriented  Programming 面向切面编程 面向切面编程的核心是动态代理设计模式.请先參见动态代理设计模式笔记. 以Hibernate保存一个对象到数据库为例,因为 ...

  9. spring自带的定时任务功能,基于注解和xml配置

    1.spring的配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&quo ...

随机推荐

  1. 使用 JDK11 遇到的问题

    1.下载的 JDK 解压版中没有 jre 目录以及相应的包,需要通过命令自动生成 进入 JDK 的 bin 目录下,执行以下命令,然后会在 bin 目录下生成一个 jre 目录,需要将该 jre 目录 ...

  2. 2016.9.17初中部下午NOIP普及组比赛总结

    2016.9.17初中部下午NOIP普及组比赛总结 2016.09.17[初中部 NOIP普及组 ]模拟赛 最近几次的题目都不是自己擅长的啊... 不过含金量挺高的,也好... 进度: 比赛:0+0+ ...

  3. 莫烦PyTorch学习笔记(四)——回归

    下面的代码说明个整个神经网络模拟回归的过程,代码含有详细注释,直接贴下来了 import torch from torch.autograd import Variable import torch. ...

  4. .git文件夹太大问题及解决方法

    最近我们做了自动化构建, 发现文件.git文件夹越来越大, 求后端小伙伴帮忙, 小伙伴指点了一下说周末弄了一下, 忘记命令的.大致的意思就是找到git 提交了哪些大文件. 然后重构git, 先分享给小 ...

  5. System.Web.Mvc.FilePathResult.cs

    ylbtech-System.Web.Mvc.FilePathResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Pub ...

  6. 【JEECG-Boot 技术文档】新手入门教程

    Jeecg-Boot入门教程必看(新手学习) 1.开发环境搭建 http://jeecg-boot.mydoc.io/?t=345670 开发工具 :https://pan.baidu.com/sha ...

  7. 《DSP using MATLAB》Problem 8.11

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  8. springboot项目中进行并发测试

    一 利用工具包: <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...

  9. PKU 百炼OJ 简单密码

    http://bailian.openjudge.cn/practice/2767/ #include<iostream> #include <cmath> #include ...

  10. 路飞学城-Python爬虫集训-第一章

    自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...