TZ_05_Spring_基于AOP的xml配置
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配置的更多相关文章
- Spring中基于AOP的XML架构
以下内容引用自http://wiki.jikexueyuan.com/project/spring/aop-with-spring-framenwork/xml-schema-based-aop-wi ...
- Spring 中基于 AOP 的 XML架构
Spring 中基于 AOP 的 XML架构 为了使用 aop 命名空间标签,你需要导入 spring-aop j架构,如下所述: <?xml version="1.0" e ...
- Spring AOP-xml配置
在spring AOP(一)中介绍了AOP的基本概念和几个术语,现在学习一下在XML中如何配置AOP. 在XML中AOP的配置元素有以下几种: AOP配置元素 描述 <aop:config> ...
- Spring AOP之xml 配置实现
首先这个配置模式估计现在已经不用了,因为我在我们公司的项目里面并没有看到这么配置AOP相关的东西.不过,这个就和学习spring的控制反转(IOC)和依赖注入(DI)一样,刚刚开始的时候,都是从简单的 ...
- day39-Spring 11-Spring的AOP:基于AspectJ的XML配置方式
package cn.itcast.spring3.demo2; import org.aspectj.lang.ProceedingJoinPoint; /** * 切面类 * @author zh ...
- Spring3实战第一章 Aop 切面 XML配置
刚看spring3实战书籍第一章 切面以前没有关注过 现在看到了 随手试验一下 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Objec ...
- spring中aop以xml配置方式
1 引jar包 springAOP\aopalliance.jar springAOP\aspectjrt.jar springAOP\aspectjweaver.jar springAOP\spri ...
- 【Spring四】AOP之XML配置
AOP:Aspect Oriented Programming 面向切面编程 面向切面编程的核心是动态代理设计模式.请先參见动态代理设计模式笔记. 以Hibernate保存一个对象到数据库为例,因为 ...
- spring自带的定时任务功能,基于注解和xml配置
1.spring的配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&quo ...
随机推荐
- 使用 JDK11 遇到的问题
1.下载的 JDK 解压版中没有 jre 目录以及相应的包,需要通过命令自动生成 进入 JDK 的 bin 目录下,执行以下命令,然后会在 bin 目录下生成一个 jre 目录,需要将该 jre 目录 ...
- 2016.9.17初中部下午NOIP普及组比赛总结
2016.9.17初中部下午NOIP普及组比赛总结 2016.09.17[初中部 NOIP普及组 ]模拟赛 最近几次的题目都不是自己擅长的啊... 不过含金量挺高的,也好... 进度: 比赛:0+0+ ...
- 莫烦PyTorch学习笔记(四)——回归
下面的代码说明个整个神经网络模拟回归的过程,代码含有详细注释,直接贴下来了 import torch from torch.autograd import Variable import torch. ...
- .git文件夹太大问题及解决方法
最近我们做了自动化构建, 发现文件.git文件夹越来越大, 求后端小伙伴帮忙, 小伙伴指点了一下说周末弄了一下, 忘记命令的.大致的意思就是找到git 提交了哪些大文件. 然后重构git, 先分享给小 ...
- System.Web.Mvc.FilePathResult.cs
ylbtech-System.Web.Mvc.FilePathResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Pub ...
- 【JEECG-Boot 技术文档】新手入门教程
Jeecg-Boot入门教程必看(新手学习) 1.开发环境搭建 http://jeecg-boot.mydoc.io/?t=345670 开发工具 :https://pan.baidu.com/sha ...
- 《DSP using MATLAB》Problem 8.11
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- springboot项目中进行并发测试
一 利用工具包: <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- PKU 百炼OJ 简单密码
http://bailian.openjudge.cn/practice/2767/ #include<iostream> #include <cmath> #include ...
- 路飞学城-Python爬虫集训-第一章
自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...