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 ...
随机推荐
- netty 解决粘包拆包问题
netty server TimeServer package com.zhaowb.netty.ch4_3; import io.netty.bootstrap.ServerBootstrap; i ...
- AJAX相关概念及应用
1.Ajax(Asynchronous JavaScript And XML) 异步的JavaScript和XML XML 可扩展标记语言 Ajax是常用的WEB开发技术,是联系前端和后端的桥梁 应用 ...
- [转]关于 MVVMLight 设计模式系列
关于 MVVMLight 设计模式系列 http://www.wxzzz.com/958.html MvvmLight框架使用入门 http://www.cnblogs.com/manupstairs ...
- Python xlwt模块
Examples Generating Excel Documents Using Python’s xlwt Here are some simple examples using Python’s ...
- 树形dp——cf1029E
题解给出的是带log的,,我自己写了个on的.. #include<bits/stdc++.h> #include<vector> using namespace std; # ...
- BZOJ 1579 [Usaco2009 Feb]Revamping Trails 道路升级
堆优化的dijkstra. 把一个点拆成k个. 日常空间要开炸一次.. //Twenty #include<cstdio> #include<cstring> #include ...
- 【源码】PyObject_VAR_HEAD 定长对象 变长对象
PyObject_VAR_HEAD Python-3.7.4\Include\object.h /* PyObject_VAR_HEAD defines the initial segm ...
- C++中无数据成员的类的对象占用内存大小
结论: 对于没有数据成员的对象,其内存单元也不是0,c++用一个内存单元来表示这个实例对象的存在. 如果有了数据或虚函数(虚析构函数),则相应的内存替代1标记自己的存在. PS:以下代码均在win32 ...
- 5 第k大元素
原题网址:http://www.lintcode.com/zh-cn/problem/kth-largest-element/ 在数组中找到第k大的元素 注意事项 你可以交换数组中的元素的位置 您在真 ...
- C++ 函数模板&类模板详解
在 C++ 中,模板分为函数模板和类模板两种.函数模板是用于生成函数的,类模板则是用于生成类的. 函数模板&模板函数 类模板&模板类 必须区分概念 函数模板是模板,模板函数时 ...