![v2-7d5cdf843f1eb222b12bc9e8d64f3ab7_1440w.jpg?source=172ae18b](http://img-03.proxy.5ce.com/view/image?&type=2&guid=b702ab56-3d2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-7d5cdf843f1eb222b12bc9e8d64f3ab7_1440w.jpg?source=172ae18b)
1. JDK动态代理
(1) 什么是动态代理?
代理类在程序运行时创建的代理方式被成为动态代理
2. CGLIB动态代理
(1) JDK动态代理和CGLIB动态代理的应用场景?
如果目标对象实现了接口,采用JDK的动态代理
如果目标对象没有实现了接口,必须采用CGLIB动态代理
(2) 使用CGLIB动态代理的实现步骤?
先导入相应的jar包
创建cglib工厂类,实现MethodInterceptor接口,里面定义创建cglib对象的方法
创建cglib代理对象
通过代理对象调用目标类的方法
3. AOP介绍
(1) 你是如何理解AOP的?
面向切面编程,就是将交叉业务逻辑封装成切面,利用AOP的功能将切面织入到主
业务逻辑中。所谓交叉业务逻辑是指,通用的、与主业务逻辑无关的代码,如安全
检查、事务、日志等
(2) 使用AOP编程思想有什么好处?
交叉业务逻辑与主业务逻辑分离。这样,不会影响主业务逻辑。
4. 基于Schema-based方式之前置通知
(1) 如何搭建AOP编程环境?
导入两个jar包(aop/aopalliance)
(2) 如何创建前置通知?
使用@before(“切入点表达式”)注解,并在applicationContext文件中使用自动代理<aop:aspectj-autoproxy/>
5. 基于Schema-based方式之后置通知
(1) 基于Schema-based方式之后置通知
使用@afterReturning(“切入点表达式”)注解,并在applicationContext文件中使用自动代理<aop:aspectj-autoproxy/>
(2) 在spring配置文件中如何实现通知对目标类增强?
使用代理类来进行增强
6. 在spring配置文件中如何实现通知对目标类增强?
(1) 如何创建环绕通知?
<!-- 注册切面,环绕通知 -->
<bean id="myMethodInterceptor" class="cn.lrh.aspects.MyMethodInterceptor"></bean>
(2) 环绕通知是否能调用目标方法,如果可以,通过哪个对象调用?
可以,通过方法调用器MethodInvocation的proceed(方法) 来调用执行
7. 基于Schema-based方式之异常通知
(1) 如何创建异常通知?
创建一个java类实现ThrowAdvice接口
(2) 异常通知能否获得异常信息,需要如何配置?
如果方法执行有错误,则可以获得异常信息
![v2-4bddc280e97410e6c4138119b4de21a3_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=b702ab56-3d2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-4bddc280e97410e6c4138119b4de21a3_b.jpg)
8. 基于AspectJ方式之注解方式前置通知
(1) 描述Spring、AspectJ和AOP三者之间的关系?
AOP面向切面编程是一种编程思想,是对OOP面向对象编程的一种补充。对于AOP这种编程思想,很多框架都进行了实现。Spring就是其中之一,可以完成面向切面编程。而AspectJ也实现了AOP的功能,且其实现方式更为简捷,使用更为方便,而且还支持注解式开发。所以,Spring又将AspectJ的对于AOP的实现也引入到了自己的框架中。后面使用AOP编程都是在Spring环境下使用AspectJ来进行的。
(2) AspectJ支持的通知常见有哪些?
前置通知,后置通知,异常通知,环绕通知,最终通知
9. 基于AspectJ方式之注解方式后置通知
(1) 基于AspectJ方式之注解方式后置通知
@AfterReturning,@Before,@Around @Throws @After
(2) 后置通知能否获得目标方法返回值,需要如何配置?
可以获得,需要配置一个returning属性
10. 基于AspectJ方式之注解方式环绕通知
(1) 环绕通知能否调用目标方法,通过哪个对象?
可以,通过代理对象
(2) 环绕通知能否获得目标方法返回值,需要如何配置?
可以,需要配置returning属性
11. 基于AspectJ方式之注解方式异常通知
(1) 如果目标类不出现异常,异常通知会否执行?
不会
(2) 异常通知能否获得异常信息,如果可以,需要如何获取?
可以,需要配置Throwing属性
12. 基于AspectJ方式之注解方式最终通知
(1) 最终通知何时触发执行?
指定切入点方法执行结束时触发执行
(2) 试想想最终通知中适合写何种业务代码?
关闭资源
13. 基于AspectJ方式之配置方式前置通知
(1) 基于AspectJ方式之配置方式前置通知环境如何搭建?
<aop:before method="before(org.aspectj.lang.JoinPoint)" pointcut-ref="speakPC"/>
(2) <aop:before>标签中有哪些常用的属性,分别是什么含义?
Method:方法 pointcut-ref:切入点引用
14. 基于AspectJ方式之配置方式带参通知方法的执行
(1) 如何设定带参方法为指定类型的通知?
在方法名后面的括号里加上参数的全限定路径
(2) JointPoint该对象获取到的是什么?
切入点表达式
15. 基于AspectJ方式之配置方式后置通知
(1) 基于AspectJ方式之配置方式后置通知环境如何搭建?
<aop:after-returning method="afterReturning(java.lang.Object)" pointcut-ref="talkPC" returning="returnValue"/>
(2) 后置通知标签中有哪些常用的属性,分别是什么含义?
Method:方法 pointcut-ref:切入点引用 returning:返回值
16. 基于AspectJ方式之配置方式环绕通知
(1) 基于AspectJ方式之配置方式环绕通知通过哪个对象调用目标方法?
(2) 环绕通知标签中有哪些常用的属性,分别是什么含义?
Method:方法 pointcut-ref:切入点引用
17. 基于AspectJ方式之配置方式异常通知
(1) 基于AspectJ方式之配置方式异常通知通过哪个属性获取异常信息?
Throwing
(2) 异常通知标签中有哪些常用的属性,分别是什么含义?
Method:方法 pointcut-ref:切入点引用 Throwing:获取异常信息
18. 基于AspectJ方式之配置方式最终通知
(1) 最终通知何时被触发执行?
在该方法的调用的最后执行