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. HttpClient调用IdentityServer4获取Token并调用接口

    using System; using System.Net.Http; using IdentityModel.Client; namespace ClientCredential { class ...

  2. 阿里官方Java代码规范标准《阿里巴巴Java开发手册》下载

    https://bbs.aliyun.com/read/306592.html?page=e 2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Java代码规范标准. 这 ...

  3. 【JXOI2018】排序问题 贪心

    我们令$sum_i$表示数字i在加完数字的数列中出现的次数,那么答案显然为$\dfrac{(n+m)!}{\sum_{i=0}^{\infty}sum_i!}$ 不难发现,当每次添加的数为$[l,r] ...

  4. selenium IDE的基本命令

    waitForText.verifyText和asserText命令 waitForText语句在测试执行时用来判断某些文本是否存在界面中.若界面上显示了指定文本,测试程序会继续执行:若等待一段时间后 ...

  5. 一文详解python的类方法,普通方法和静态方法

    首先形式上的区别,实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls. 静态方法无隐含参数,主要为了类实例也可以直接调用静态方法. 所以逻辑上,类方法被类调用,实例方法被实例调用,静 ...

  6. AngularJS入门之数据验证

    AngularJS自带了对表单或控件的输入数据进行验证的功能,对于Html5的基础控件均有内建的验证器,以下列举了所有支持的验证类型: email max maxlength min minlengt ...

  7. 在MVC过滤器中获取触发的Controller、Action、参数 等

    首先是实现接口System.Web.Mvc.IActionFilter的过滤器 获取Controller.Action.参数 方法一. string actionName = filterContex ...

  8. hive 0.12.0版本 问题及注意事项

    下载地址: http://archive.cloudera.com/cdh5/cdh/5/hive-0.12.0-cdh5.1.5.tar.gz 用远程mysql作为元数据存储 创建数据库,设置字符集 ...

  9. Spring Security构建Rest服务-1200-SpringSecurity OAuth开发APP认证框架

    基于服务器Session的认证方式: 前边说的用户名密码登录.短信登录.第三方登录,都是普通的登录,是基于服务器Session保存用户信息的登录方式.登录信息都是存在服务器的session(服务器的一 ...

  10. 开源视频会议bigbluebutton

    这是另一个开源视频会议项目,简称bbb 官方网站:http://bigbluebutton.org/ 代码地址:https://code.google.com/p/bigbluebutton/ dem ...