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 ...
随机推荐
- CSRF spring mvc 跨站请求伪造防御(转)
CSRF CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一 ...
- C3P0连接池参数配置
<!--acquireIncrement:链接用完了自动增量3个. --> <property name="acquireIncrement">3</ ...
- RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more infor
在virtualenv环境下使用matplotlib绘图时遇到了这样的问题: >>> import matplotlib.pyplot as pltTraceback (most r ...
- 基于windows消息的响应USB插入或取出
导语:当有设备进入windows时,系统会向所有的应用层发送WM_DEVICECHANGE消息.进一步根据相应的事件判断设备. LRESULT CALLBACK WndProc(HWND hWnd, ...
- LoadRunner脚本编写(5)-- 检查点,关联等函数
LoadRunner脚本编写(5)-- 检查点,关联等函数 http://www.51testing.com/?34866/action_viewspace_itemid_70224.html来继续翻 ...
- leetcode146周赛-5132-颜色最短的交替路径
---恢复内容开始--- 题目描述: class Solution: def shortestAlternatingPaths(self, n: int, red_edges, blue_edges) ...
- 小程序关闭时暂停webview里的音乐
document.addEventListener("visibilitychange", () => { if(document.hidden) { // 页面被 ...
- c语言学习笔记 - 结构体位域
在学习结构体的时候遇到了位域这个概念,位域主要是为了节省内存空间,比如用一个32位,4个字节的int存储一个开关变量时,会造成空间浪费,于是干脆就考虑在这个32划分不同的区域来存储数据,例如划出1位存 ...
- Android之AbsoluteLayout(绝对布局)
1.属性简介 为了适配不同机型,绝对布局使用很少! android:layout_x="50dp" android:layout_y="100dp"也只有在Ab ...
- elasticsearch复合查询
查询最近一小时内data.@level字段为Error的日志并按date倒序排列,输出最近10条,只输出[date,message]两个字段 GET events*/_search { &qu ...