JavaEE企业级项目开发(第3版)教学课件微课5-4:Spring AOP的基本实现.pptx
主讲人:闾枫延迟符SpringAOP的基本实现SpringAOP
SpringAOP的通知延迟符基于JDK的动态代理基于CGLIB的动态代理
SpringAOP的通知延迟符Beforeadvice(前置通知):连接点前执行,不能终止后续流程,除非有异常抛出;Afterreturningadvice(返回通知):连接点正常返回时执行,若有异常抛出不执行;Aroundadvice(环绕通知):围绕连接点前后执行,不管有没有异常抛出;Afteradvice(最终通知或后置通知):连接点执行结束时执行,无论是正常返回还是异常结束,类似于try/cath中的finally,不论前面执行结果如何,都会执行的方法;Afterthrowingadvice(异常通知):连接点方法抛出异常时才执行。SpringAOP的通知是基于连接点(Joinpoint)业务逻辑的一种增强,主要提供了下面5种类型的通知:
SpringAOP的基本实现延迟符SpringAOP应用层的代理创建方式ProxyFactoryBeanAspectJProxyFactoryProxyFactory
ProxyFactoryBean简介ProxyFactoryBean是创建AOP的最基本的方式,它是FactoryBean接口的实现类,是一个工厂Bean。ProxyFactoryBean将AOP和IOC融合起来,我们可以自定义代理实现逻辑,最终交给Spring容器管理即可。interceptorsNames3要在代理的目标类中添加的功能,即通知集合。target1需要代理的目标类,即需要被切面增强的对象。proxyInterfaces2代理对象所需要实现的接口列表。singleton5创建的代理是否是单例的,若值为true,则每次从Spring容器中请求代理时都会返回同一个实例;若值为false,每次请求都会创建一个新的代理实例。ProxyFactoryBean类中的常用可配置属性4proxyTargetClass是否使用CGLIB来创建代理。设置为true,则使用CGLIB代理。
SpringAOP的前置通知-案例延迟符学习案例案例代码使用ProxyFactoryBean创建代理,实现SpringAOP的前置通知。
SpringAOP的前置通知-案例延迟符packagecom.test.dao;publicinterfaceIHello{publicvoidhello(Stringname);}1.定义接口和实现类packagecom.test.dao;publicclassHelloImplimplementsIHello{@Overridepublicvoidhello(Stringname){System.out.println(Hello+name);}}
SpringAOP的前置通知-案例延迟符//通知publicclassBeforeAdviceAspectimplementsMethodBeforeAdvice{@Overridepublicvoidbefore(Methodmethod,Object[]args,Objecttarget)throwsThrowable{System.out.println(这是一个前置通知,在方法运行前,先运行);}}2.定义切面类
SpringAOP的前置通知-案例延迟符?xmlversion=1.0encoding=UTF-8?beansxmlns=/schema/beansxmlns:xsi=/2001/XMLSchema-instancexsi:schemaLocation=/schema/beans /schema/beans/spring-beans-4.3.xsd!--将业务类交给Spring容器管理--beanid=helloclass=com.test.dao.HelloImpl/bean!--将切面类交给Spring容器管理--beanid=beforeAdviceclass=com.test.aspects.BeforeAdviceAspect/!--使用Spring代理工厂ProxyFactoryBean创建代理,并进行基本配置--beanid=helloProxyclass=org.springframework.aop.framework.ProxyFa