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之一系列做法的更多相关文章

  1. Spring AOP——Spring 中面向切面编程

    前面两篇文章记录了 Spring IOC 的相关知识,本文记录 Spring 中的另一特性 AOP 相关知识. 部分参考资料: <Spring实战(第4版)> <轻量级 JavaEE ...

  2. Spring中的AOP 专题

    Caused by: java.lang.IllegalArgumentException: ProceedingJoinPoint is only supported for around advi ...

  3. (五)Spring 中的 aop

    目录 文章目录 AOP概念 AOP原理 AOP术语 **`Spring`** 中的 **`aop`** 的操作 使用 `AspectJ` 实现 `aop` 的两种方式 AOP概念 浅理解 aop :面 ...

  4. Spring中的AOP

    什么是AOP? (以下内容来自百度百科) 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...

  5. Spring中关于AOP的实践之概念

    一.什么是AOP AOP:也称作面向切面编程 在分享几个概念执行我想先举个栗子(可能例子举得并不是特别恰当): 1.假如路人A走在大街上,被一群坏人绑架了: 2.警察叔叔接到报警迅速展开行动:收集情报 ...

  6. Spring学习笔记(四)—— Spring中的AOP

    一.AOP概述 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.O ...

  7. 2018.12.24 Spring中的aop演示(也就是运用aop技术实现代理模式)

    Aop的最大意义是:在不改变原来代码的前提下,也不对源代码做任何协议接口要求.而实现了类似插件的方式,来修改源代码,给源代码插入新的执行代码. 1.spring中的aop演示 aop:面向方面编程.不 ...

  8. JavaWeb_(Spring框架)认识Spring中的aop

    1.aop思想介绍(面向切面编程):将纵向重复代码,横向抽取解决,简称:横切 2.Spring中的aop:无需我们自己写动态代理的代码,spring可以将容器中管理对象生成动态代理对象,前提是我们对他 ...

  9. spring中的AOP 以及各种通知 配置

    理解了前面动态代理对象的原理之后,其实还是有很多不足之处,因为如果在项目中有20多个类,每个类有100多个方法都需要判断是不是要开事务,那么方法调用那里会相当麻烦. spring中的AOP很好地解决了 ...

随机推荐

  1. ZZNU 2076(退役学长最后的神功 zz题)

    题目链接:http://acm.zznu.edu.cn/problem.php?pid=2076 输入一个T表示有T个样例每组实例一个整数n(0〈n〈1000接下来输入2*n个数字,代表一个2*n的矩 ...

  2. Storm-kafka源码分析之Config相关类

    要创建一个KafkaSpout对象,必须要传入一个SpoutConfig对象,KafkaSpout的构造函数定义如下: public KafkaSpout(SpoutConfig spoutConf) ...

  3. 使用 find 命令实现高级排除需求

    使用 find 命令实现高级排除需求 Linked 关于 find 命令,本博客介绍过 atime,ctime,mtime 介绍过 --exec 参数. 介绍这些的基本需求是进行文件管理.事实上,基于 ...

  4. C#之初识单例模式

    当我们使用QQ的时候就会发现,他可以启动多个QQ,但是有时候,我们不想这样做,这时候我们就需要使用到单例模式. 1.将Form2的构造函数转为私有 using System.Windows.Forms ...

  5. WPF一步步开发XMPP IM客户端1:入门

    [起因&目标] 因为工作原因接触openfire服务端和spark客户端开发,主要是基于openfire扩展开发了针对企业用途的服务器插件,还开发了各个平台上的客户端(Windows\mac\ ...

  6. python3模块: json & pickle

    概念: 序列化(Serialization): 将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的 ...

  7. Scala中使用implict 扩展现有类的方法

    Scala中implict的一种用法就是扩展现有类的方法,有点类似于.Net中的扩展方法(MS对扩展方法的介绍:扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改 ...

  8. 7.xamarin.android 发布签名与控制apk大小

    概述 做了xamarin android 后大家想打包一个apk,发布给其他人使用本章我们将带领大家如何打包签名一个apk. 打包 对于VS2017 或者是VS MAC来说打包一个APK非常简单. 首 ...

  9. Karatsuba乘法--实现大数相乘

    Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...

  10. RocketMQ-Filer

    一.搭建RocketMQ集群 我搭建的是2-master no slave模式,所以在${rocketmq}/conf/2m-noslave/下的 brokder-*.properties 中添加 f ...