1. 你能使用@Aspect annotation将某个Java类标注为Aspect,这个Aspect类里的所有公有方法都可以成为一个Advice,Spring提供了5个Annotation去将某个方法标注为Advice:@Before、@After、@AfterReturning、@AfterThrowing、@Around;为了启用基于annotation的AOP编程,你需要在Application Context文件中插入<aop:aspectj-autoproxy/>标记;
    @Before、@After、@AfterReturning、@AfterThrowing、@Around都接受一个expression作为pointcut

    注意:标记了@Aspect的类不会被Spring Container识别到,所以你还得在这些类上面标记@Component annotation;

    • @Before标记的方法可以接受一个JointPoint类型的参数去获取切点的信息;
    • @After标记的方法可以接受一个JointPoint类型的参数去获取切点的信息;
    • @AfterReturning标记的方法除开可以接受一个JointPoint类型的参数外,你还可以获取切点的返回值;方式是将@AfterReturning的returning属性设置为Advice方法需要接受的参数名,然后在Advice方法中添加该参数;
    • @AfterThrowing标记的方法除开可以接受一个JointPoint类型的参数外,你还可以获取切点抛出的异常,方式是将@AfterThrowing的throwing属性设置为Advice方法需要接收的参数名,然后在Advice方法中添加该参数,该参数的类型可以使一个Throwable类型,也可以是一个具体的异常类型;取决于你想捕获哪些异常;
    • @Aroung标记的方法可以接受一个ProceedingJointPoint类型的参数;
  2. 如果有多个Aspect同时应用到相同的切点,Aspect的优先级是未确定的;你可以通过两种方式来做到:
    • 让Aspect实现Ordered接口;
    • 在Aspect上加上@Order annotation;

    注意,无论你使用哪种方式,你都要指定一个数字值代表优先级,这个值也高代表优先级越低;

  3. 从上面可以看到,pointcut都是直接定义在advice上的,如果我们想让一个Pointcut定义在多个Advice上,我们可以在Aspect中单独定义一个空方法体的方法,并将其标注上@Pointcut annotation,这个方法的访问修饰符就代表了这个方法的可见性;其他的Advice可以通过这个方法名来引用这个Pointcut;很多标注Advice的Annotation,如@Before、@After、@AfterReturning、@AfterThrowing、@Around都提供了一个pointcut属性来引用这个方法名(如果这个Advice与定义Pointcut的方法不在同一个类里面,还得指明类名,如果不在同一包里面,还得指明包名);
    如果想让一个Pointcut被多个Aspect共享,最好是把它放在一个公共的类里面;

Spring学习笔记之四----基于Annotation的Spring AOP编程的更多相关文章

  1. Spring学习笔记之三----基于Annotation的Spring IOC配置

    使用Annotation 来创建Bean有两种方式 在配置类中创建bean(配置类是指标注为@Configuration的类),在配置类中每一个创建bean的方法都应该标注为@Bean,可以在@Bea ...

  2. Spring学习笔记之一----基于XML的Spring IOC配置

    1. 在spring配置文件中,如果对一个property进行直接赋值,可使用<value>元素,spring负责将值转化为property指定的类型:也可以直接在property元素上使 ...

  3. Spring学习笔记(二) 初探Spring

    版权声明 笔记出自<Spring 开发指南>一书. Spring 初探 前面我们简单介绍了 Spring 的基本组件和功能,现在我们来看一个简单示例: Person接口Person接口定义 ...

  4. Spring学习笔记(1)——初识Spring

    一.Spring是什么       通常说的Spring其实指的是Spring Framework,它是Spring下的一个子项目,Spring围绕Spring Framework这个核心项目开发了大 ...

  5. 【Spring学习笔记-1】Myeclipse下Spring环境搭建

    *.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...

  6. Java框架spring 学习笔记(九):Spring的bean管理(@Required、@Component、@Autowired、@Resource注解)

    注解:代码里面特殊的标记,使用注解可以完成相关功能 注解写法:@注解名称(属性名.属性值) @Required 用在set方法上,一旦用了这个注解,那么容器在初始化bean的时候必须要进行set,也就 ...

  7. Spring 学习笔记(四):Spring AOP

    1 概述 本文主要讲述了AOP的基本概念以及在Spring中AOP的几种实现方式. 2 AOP AOP,即Aspect-Oriented Programming,面向切面编程,与OOP相辅相成.类似的 ...

  8. Spring 学习笔记(三):Spring Bean

    1 Bean配置 Spring可以看做是一个管理Bean的工厂,开发者需要将Bean配置在XML或者Properties配置文件中.实际开发中常使用XML的格式,其中<bean>中的属性或 ...

  9. Spring学习记录(十三)---基于xml文件配置AOP

    上一篇讲了用注解配置AOP,现在讲用xml怎么配置AOP 其实逻辑是一样的,只是用xml的方法,要把这种逻辑写出来,告诉spring框架去执行. 例子:这里的例子和上一篇的例子一样.换成xml方式 / ...

随机推荐

  1. UI控件闪烁及刷新

    我们常常在一个窗口上放置很多控件,在改变窗口大小时,控件会跟着一起闪烁... 此时,可以将窗口添加WS_CLIPCHILDREN属性即可.(如果包含多层,都需要WS_CLIPCHILDREN属性) 默 ...

  2. WPF中UserControl和DataTemplate

    最新更新: http://denghejun.github.io 前言 前言总是留给我说一些无关主题的言论,WPF作为全新Microsoft桌面或web应用程序显示技术框架, 从08年开始,一直到现在 ...

  3. struts2上传图片的全过程

    struts2上传图片的过程 1.写一个上传的jsp页面upload_image.jsp,内容如下:<body><center>    <font color=" ...

  4. requirejs:研究笔记

    模块化历史 模块化异步加载方式 后期维护 查找问题 复用代码 防止全局变量的污染 http://requirejs.cn/ http://requirejs.org/ 我的目录结构 总体步骤 < ...

  5. mysql求最大第二,最大第三个数

    题目是这样的: 集团有多个部门,部门下有多个员工,求每个部门绩效排名第二的人员 sql语句是这样的 SELECT dep, MAX(score) FROM zx WHERE score NOT IN ...

  6. PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别 有点像static 和 self的意思 !

    PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 通常情况下,PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 都会返回 PHP ...

  7. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

    mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...

  8. gradle和maven有什么用?分别有什么区别?

    作者:EZLippi链接:http://www.zhihu.com/question/29338218/answer/51293828来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  9. win7与virtualbox中centos文件共享

    1.首先在Windows下创建一个文件夹,用于存放共享的文件,例如 E:\share 2.将该文件夹设置为共享文件夹. 右击文件夹,选择共享->特定用户 选择Everyone->添加-&g ...

  10. JDK安装配置

    http://www.runoob.com/java/java-environment-setup.html