spring aop实例讲解_基于代理类的AOP实现

ef3b68e87eca97eb9f28ea127fd15a64.png

通过前面的学习,读者对Spring中的两种代理模式已经有了一定的了解。实际上,Spring中的AOP代理默认就是使用JDK动态代理的方式来实现的。在Spring中,使用Proxy FactoryBean是创建AOP代理的最基本方式。接下来,将对Spring中基于代理类的AOP实现的相关知识进行详细讲解。

Spring的通知类型

在讲解具体的代理类之前,我们需要先了解一下Spring的通知类型。Spring中的通知按照在目标类方法的连接点位置,可以分为以下5种类型。

· org.aopalliance.intercept.MethodInterceptor(环绕通知)

在目标方法执行前后实施增强,可以应用于日志、事务管理等功能。

· org.springframework.aop.MethodBeforeAdvice(前置通知)

在目标方法执行前实施增强,可以应用于权限管理等功能。

· org.springframework.aop.AfterReturningAdvice(后置通知)

在目标方法执行后实施增强,可以应用于关闭流、上传文件、删除临时文件等功能。

· org.springframework.aop.ThrowsAdvice(异常通知)

在方法抛出异常后实施增强,可以应用于处理异常记录日志等功能。

· org.springframework.aop.IntroductionInterceptor(引介通知)

在目标类中添加一些新的方法和属性,可以应用于修改老版本程序(增强类)。

ProxyFactoryBean

ProxyFactoryBean是FactoryBean接口的实现类,FactoryBean负责实例化一个Bean,而ProxyFactoryBean负责为其他Bean创建代理实例。在Spring中,使用ProxyFactoryBean是创建AOP代理的基本方式。

ProxyFactoryBean类中的常用可配置属性如表3-1所示。

990dd07d69f80528f8d7fe894a3ebd26.png

对ProxyFactoryBean类有了初步的了解后,接下来通过一个典型的环绕通知案例,来演示Spring使用ProxyFactoryBean创建AOP代理的过程,具体步骤如下。

(1)在核心JAR包的基础上,再向chapter03项目的lib目录中导入AOP的JAR包spring-aop-4.3.6.RELEASE.jar和aopalliance-1.0.jar,如图3-5所示。

360664d8c8f895f7e8853cc0bcb2cab1.png

关于这两个JAR包的介绍如下。

· spring-aop-4.3.6.RELEASE.jar:是Spring为AOP提供的实现包,Spring的包中已经提供。

· aopalliance-1.0.jar:是AOP联盟提供的规范包,该JAR包可以通过地址“http://mvnrepository.com/artifact/aopalliance/aopalliance/1.0”下载。

(2)在src目录下,创建一个com.itheima.factorybean包,在该包中创建切面类MyAspect。由于实现环绕通知需要实现org.aopalliance.intercept. MethodInterceptor接口,所以MyAspect类需要实现该接口,并实现接口中的invoke()方法,来执行目标方法,如文件3-9所示。

ab37cafbae448f8e1fcf755b064dc570.png

这里为了演示效果,在目标方法前后分别执行了检查权限和记录日志的方法,这两个方法也就是增强的方法,也就是通知。

(3)在com.itheima.factorybean包中,创建配置文件applicationContext.xml,并指定代理对象,如文件3-10所示。

35c25ce2e9836de3e032f05ef42745a6.png

在文件3-10中,首先通过元素定义了目标类和切面,然后使用ProxyFactoryBean类定义了代理对象。在定义的代理对象中,分别通过子元素指定了代理实现的接口、代理的目标对象、需要织入目标类的通知以及代理方式。

(4)在com.itheima.factorybean包中,创建测试类ProxyFactoryBeanTest,在类中通过Spring容器获取代理对象的实例,并执行目标方法,如文件3-11所示。

bf7594bde08e46e3ac91f970c9167b00.png

执行程序后,控制台的输出结果如图3-6所示。

1b1ebe96d9d90a22aecf04aeee40dbe0.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值