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很好地解决了 ...
随机推荐
- Python网络通信
day26 网络通信 参考: http://www.cnblogs.com/yuanchenqi/articles/5692716.html 男生是client端,字条是socket(sk),通过sk ...
- android 代码实现back键功能
方案一,简单但响应慢: doExec("input keyevent 4"); public String doExec(String cmd) { String s = &quo ...
- python3模块: json & pickle
概念: 序列化(Serialization): 将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的 ...
- MFC 剪切板的使用、线程介绍
一.MFC 剪切板 CListBox *pList = (CListBox*)GetDlgItem(IDC_LIST1); // 获取ListBox控件句柄 CString strTmp; pList ...
- 课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)—— 1、经常提及的问题
Frequently Asked Questions Congratulations to be part of the first class of the Deep Learning Specia ...
- JVM-压缩指针
什么是压缩指针: 通常64位JVM消耗的内存会比32位的最多会多用1.5倍,这是因为对象指针在64位架构下,对象指针长度会翻倍. 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内 ...
- 解析ASP.NET Mvc开发之EF延迟加载 分类: ASP.NET 2014-01-04 01:29 4017人阅读 评论(1) 收藏
目录: 从明源动力到创新工场这一路走来 解析ASP.NET WebForm和Mvc开发的区别 解析ASP.NET 和Mvc开发之查询数据实例 ----------------------------- ...
- C/C++ -- Gui编程 -- Qt库的使用 -- 信号与槽的关联
Qt信号与槽的三种关联方法:1.设计界面关联,编辑信号/槽,自动关联 2.手动关联(1).头文件中定义槽 -----mywidget.h----- #ifndef MYWIDGET_H #define ...
- maven tomcat插件上传项目到tomcat服务器报错SEVERE: One or more listeners failed to start.
以前觉了maven依赖设置很简单,就是将手动导入jar包转化为自动下载导入 但发现的一个问题, 在使用maven插件tomcat打包上传工具时 tomcat-maven-plugin <buil ...
- Struts动态表单(DynamicForm)
动态表单的含义是不要手动定义,直接在配置文件中进行定义. 1.手动进行定义 <form-beans > <form-bean name="userForm" ty ...