(spring-第17回【AOP基础篇】) 创建增强类

一、   增强类包含的信息:

a)   横切逻辑(插入的具体代码)

b)   部分连接点信息(在方法的哪个位置插入代码,比如方法前、方法后等)。

二、   增强的类型

每一种增强有一个需要实现的增强类。

a)   前置增强

  1. 顾名思义,在目标方法前实施增强。

  2. 增强类:org.springframework.aop.MethodBeforeAdvice.

  3. 举例,三步走:

1)   第一步,创建目标类接口和目标类:

  

  

2)   第二步,实现MethodBeforeAdvice,创建增强类:

3)   第三步,通过ProxyFactory把增强织入目标类,并生成代理。

4)   第三步改为在XML中配置:

    1. 配置中当然还有一些其他属性。比如singleton,决定返回是否为单实例等。
    2. 三个P分别为:指定代理的接口、指定目标类、指定增强

5)   注意事项:

    1. ProxyFactory 内部使用JDK代理或CGLib代理。
    2. 通过ProxyFactory的setInterfaces可以指定针对接口进行代理(这时ProxyFactory就使用JDK动态代理。)
    3. 如果是针对类的代理,则使用CGLib。
    4. 通过ProxyFactory 的setOptimize(true)可启动自动优化代理。

b)   后置增强

c)   环绕增强(综合实现了前置、后置增强)

d)   异常抛出增强

常用于事务管理,当参与事务的某个Dao发生异常时,事务管理器就必须回滚事务。这时可以在增强逻辑中写回滚代码。

e)   引介增强

  1. 引介增强是一种比较特殊的增强类型,它不是在目标方法周围织入增强,而是为目标类创建新的方法和属性

  2. 所以,引介增强的连接点是类级别的,而非方法级别。

  3. 所以,我们可以给目标类添加一个接口的实现,即原来目标类未实现某个接口,通过引介增强可以为目标类创建某接口的代理。

  4. 举例:三步走:

1)   第一步,定义接口

  

  第四行是我们企图加在目标类上的增强方法。

2)   第二步,通过XML配置把增强织入目标类

3)   第三步,强制实现

时间: 2024-08-12 21:44:58

(spring-第17回【AOP基础篇】) 创建增强类的相关文章

(spring-第16回【AOP基础篇】)基本概念

AOP(Aspect Oriented Programing),面向切面方程.介绍具体定义前,先看一个例子: 1 package com.baobaotao.concept; 2 3 public class ForumService { 4 private TransactionManager transManager; 5 private PerformanceMonitor pmonitor; 6 private TopicDao topicDao; 7 private ForumDao

Spring AOP 创建增强类

AOP联盟为增强定义了org.aopalliance.aop.Advice接口,Spring支持5种类型的增强:  1)前置增强:org.springframework.aop.BeforeAdvice 代表前置增强,因为Spring 只支持方法级的增强,所有MethodBeforeAdvice是目前可用的前置增强,表示在目标方法执行前实施增强,而BeforeAdvice是为了将来版本扩展需要而定义的:  2)后置增强:org.springframework.aop.AfterReturning

Spring 创建增强类

Spring 使用增强类定义横切逻辑,同时由于 Spring 只支持方法连接点,增强还包括在方法的哪一点加入横切代码的方位信息,所以增强既包含横切逻辑,又包含部分连接点的信息. 1.增强类型 AOP 联盟为增强定义了 org.aopalliance.aop.Advice 接口,Spring 支持5种类型的增强,先来了解一下增强接口继承关系图,如下图所示. 带 <<spring>> 标识的接口是 Spring 所定义的扩展增强接口:带 <<aoppalliance>

创建增强类

Spring支持5种类型的增强: 1).前置增强 org.springframework.aop.BeforeAdvice代表前置增强.spring目前只支持方法级的增强, 所以MethodBeforeAdvice是目前可用可用的前置增强, 表示在目标方法执行前执行增强. 2).后置增强 org.springframework.aop.AfterReturningAdvice代表后置增强, 表示在目标方法返回后实施增强逻辑 3).环绕增强 org.aopalliance.intercept.Me

Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试

承接上文,该篇即为项目整合的介绍了. 废话不多说,先把源码和项目地址放上来,重点要写在前面. github地址为ssm-demo 你也可以先体验一下实际效果,点击这里就行啦 账号:admin 密码:123456 从构思这个博客,一直到最终确定以这个项目为切入点,中间也是各种问题出现,毕竟是新人,所以也是十分的小心,修改代码以及搬上github其实花了不少时间,但也特别的认真,不知道是怎么回事,感觉这几天的过程比逼死产品经理还要精彩和享受.或许是博客路上的第一站吧,有压力也有新奇,希望自己能坚持下

Linux 磁盘管理 基础篇--创建基本文件分区

1 概述 本文通过对讲解了磁盘的基本概念,分区,创建文件系统,挂载,卸载等步骤进行讲解.使得用户能够创建基本的磁盘并挂载使用空间. 2 磁盘基本概念 2.1 磁盘空间 每个扇区大小是512byte,这是磁盘的最小单位 每一个磁道上有多少个扇区就是扇区数 sectors 每一圈叫做磁道(track),最外面的叫做0磁道 依次往里增加,最里面的磁道数最大 每个盘有两个面,都有两个磁头(head)读取数据 相同的磁道组成的叫做柱面(cylinder),同样最外面叫0柱面,最里面柱面数最大 因此, 每个

spring quartz定时任务配置【基础篇】

一个定时执行的job package dk.spring.quartz; import java.util.Date; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; /** * 使用spring集成的quartz调度 */ public class QuartzTe

Spring+SpringMVC+MyBatis+easyUI整合基础篇(四)代码简化

敲了一天的代码,有些烦,感觉前一篇文章写的太笼统了,哈哈哈. 本来呢,也就是刚开始写,所以很多细节都想不到,源码也放上来了,自己动动手应该也就可以了,无非是自己多注意一点,细心一点,编码啊,jar包啊,有时候或者一个分号,或者一个单引号双引号,这些都可能导致出错的,一定要多动手,自己多实践. 又看了一下代码,感觉对于入门的人来说,还是有些不合适的,easyui.ajax这些知识点也不是一天两天就能掌握的,所以,又写了一个小demo,把easyui.日志这些都去掉了,就保留一个功能,当做搭建项目的

Spring+SpringMVC+MyBatis+easyUI整合基础篇(七)JDBC url的连接参数

在java程序与数据库连接的编程中,mysql jdbc url格式如下: jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]... 如 jdbc:mysql://localhost:3306/test?user=test&password=123456 刚好最近遇到一个数据库连接参数带来的问题,所以罗列一下几个较为重要的参数: user 数据库用户名(用于连接数据库) 必要参数. p