Spring 中面向AOP之一系列做法
Spring的AOP实现是通过集成AspectJ框架实现的。
想必这句话大家都知道了吧,不知道也没关系,最起码你现在知道了。
四种实现方案,接下来我们一一去揭开它的神秘的面纱.......
第一种(伪代码的形式)
经典AOP形式的:
<bean id="userDao" class="UserDaoImpl"></bean>
<bean id="service" class="UserServiceImpl">
<property name="dao" ref="userDao"></property>
</bean>
<bean id="myBefore" class="MyBeforeAdvice"></bean>
<bean id="myAfter" class="MyAfterAdvice"></bean>
<aop:config>
<aop:pointcut id="point" expression="execution(* *..biz.*.*(..))"></aop:pointcut>
<aop:advisor pointcut-ref="point" advice-ref="myBefore"></aop:advisor>
<aop:advisor pointcut-ref="point" advice-ref="myAfter"></aop:advisor>
</aop:config>
第二种(伪代码形式)
使用注解方式
@Aspect
public class MyBeforeAspect{
@Before(value="execution(* *..biz.*.*(..))")
public void before(){
System.out.println("====before===");
}
@AfterReturning(value="execution(* *..biz.*.*(..))")
public void after(){
System.out.println("=====after=====");
}
}
<bean id="stuDao" class="StudentDaoImpl"></bean>
<bean id="stuService" class="StudentService">
<property name="dao" ref="stuDao">
</bean>
<!-- 准备aop:aspectj-autoproxy-->
<bean class="MyBeforeAspect"></bean>
<aop:aspectj-autoproxy />
第三种(伪代码形式)
使用AspectJ基于xml形式
public class MyAspectJMethod{
public void myBefore(){
System.out.println("AspectJ=========before");
}
public void myAfter(){
System.out.println("AspectJ==========after");
}
}
<bean id="stuDao" class="StudentDaoImpl"></bean>
<bean id="stuBiz" class="StudentBizImpl"></bean>
<bean id="myAspectJ" class="MyAspectJMethod">
<aop:config>
<aop:pointcut id="point" expression="execution(* *..biz.*.*(..))"></aop:pointcut>
<aop:aspect ref="myAspectJ">
<aop:before method="myBefore" ponitcut-ref="point"></aop:before>
<aop:after method="myAfter" pointcut-ref="point"></aop:after>
</aop:aspect>
</aop:config>
上面配置<aop:pointcut>节点也可以放到<aop:aspect>节点内,如下:
<aop:config>
<aop:aspect ref="myAspectJ">
<aop:pointcut id="point" expression="execution(* *..biz.*.*(..))"></aop:pointcut>
<aop:before method="myBefore" ponitcut-ref="point"></aop:before>
<aop:after method="myAfter" pointcut-ref="point"></aop:after>
</aop:aspect>
</aop:config>
上述两种配置都可以实现该功能。。。。。
Spring 中面向AOP之一系列做法的更多相关文章
- Spring AOP——Spring 中面向切面编程
前面两篇文章记录了 Spring IOC 的相关知识,本文记录 Spring 中的另一特性 AOP 相关知识. 部分参考资料: <Spring实战(第4版)> <轻量级 JavaEE ...
- Spring中的AOP 专题
Caused by: java.lang.IllegalArgumentException: ProceedingJoinPoint is only supported for around advi ...
- (五)Spring 中的 aop
目录 文章目录 AOP概念 AOP原理 AOP术语 **`Spring`** 中的 **`aop`** 的操作 使用 `AspectJ` 实现 `aop` 的两种方式 AOP概念 浅理解 aop :面 ...
- Spring中的AOP
什么是AOP? (以下内容来自百度百科) 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...
- Spring中关于AOP的实践之概念
一.什么是AOP AOP:也称作面向切面编程 在分享几个概念执行我想先举个栗子(可能例子举得并不是特别恰当): 1.假如路人A走在大街上,被一群坏人绑架了: 2.警察叔叔接到报警迅速展开行动:收集情报 ...
- Spring学习笔记(四)—— Spring中的AOP
一.AOP概述 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.O ...
- 2018.12.24 Spring中的aop演示(也就是运用aop技术实现代理模式)
Aop的最大意义是:在不改变原来代码的前提下,也不对源代码做任何协议接口要求.而实现了类似插件的方式,来修改源代码,给源代码插入新的执行代码. 1.spring中的aop演示 aop:面向方面编程.不 ...
- JavaWeb_(Spring框架)认识Spring中的aop
1.aop思想介绍(面向切面编程):将纵向重复代码,横向抽取解决,简称:横切 2.Spring中的aop:无需我们自己写动态代理的代码,spring可以将容器中管理对象生成动态代理对象,前提是我们对他 ...
- spring中的AOP 以及各种通知 配置
理解了前面动态代理对象的原理之后,其实还是有很多不足之处,因为如果在项目中有20多个类,每个类有100多个方法都需要判断是不是要开事务,那么方法调用那里会相当麻烦. spring中的AOP很好地解决了 ...
随机推荐
- 奇异值分解(SVD)详解及其应用
参考:https://blog.csdn.net/shenziheng1/article/details/52916278 论文:http://www-users.math.umn.edu/~lerm ...
- class字节码结构(四)(方法集合的结构)
<Java虚拟机原理图解>1.5. class文件中的方法表集合--method方法在class文件中是怎样组织的 一个类有多个方法,所以方法肯定是一个集合. 目标是: 1,了解方法在字节 ...
- logcat -- 基本用法
1.Log类是一个日志类,我们可以在代码中使用logcat打印出消息 常见的日志记录方法有: v(String,String) --verbose 显示全部信息 d(String,String) - ...
- 一元运算符 +,可用于将变量转换为数字;如果变量不能转换,它仍然会是一个数字,但值为 NaN (不是一个数字)
一元运算符,可用于将变量转换为数字: var y = "5"; var x = + y; console.log(typeof y);//string 类型 console.log ...
- javascript数据基本类型和引用类型区别详解
JavaScript基本数据类型: js基本数据类型包括:undefined,null,number,boolean,string.基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值. ...
- Netty核心概念(10)之内存管理
1.前言 之前的章节已经将启动demo中能看见的内容都分析完了,Netty的一个整体样貌都在第8节线程模型最后给的图画出来了.这些内容解释了Netty为什么是一个异步事件驱动的程序,也解释了Netty ...
- 使用seek()方法报错:“io.UnsupportedOperation: can't do nonzero cur-relative seeks”错误的原因
在使用seek()函数时,有时候会报错为 “io.UnsupportedOperation: can't do nonzero cur-relative seeks”,代码如下: >>& ...
- 2018春招-今日头条笔试题5题(后附大佬答案-c++版)
1题目描述 在n个元素的数组中,找到差值为k的除重后的数字对 输入描述 第一行:n和k,n表示数字的个数,k表示差值 第二行:n个整数 输入样例 输入: 5 2 1 5 3 4 2 输出: 3 说明: ...
- vue制作小程序--mpvue
mpvue是一个使用 Vue.js 开发小程序的前端框架 http://mpvue.com/ sass的使用 https://segmentfault.com/q/1010000014194954 n ...
- 分区助手里如何从临近盘(如D盘)抽取一定的空间给已经快满了的盘(如E盘)(博主推荐)(图文详解)
不多说,直接上干货! 分区助手是什么?(博主推荐)(图文详解) 分区助手各版本比较(图文详解) 分区助手官网使用教程(专业版.绿色版和WinPE版)(图文详解) 安装分区助手时出现“分区助手已安装到你 ...