标签:spring面试 java 面试 aop spring
33 Spring AOP的概念
面向切面的编程,是一种编程技术,是OOP(面向对象编程)的补充和完善。OOP的执行是一种从上往下的流程,并没有从左到右的关系。因此在OOP编程中,会有大量的重复代码。而AOP则是将这些与业务无关的重复代码抽取出来,然后再嵌入到业务代码当中。常见的应用有:权限管理、日志、事务管理等。
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。Spring AOP实现用的是动态代理的方式。
http://blog.csdn.net/moreevan/article/details/11977115
34 AOP的相关概念
- 切面/方面(Aspect):AOP核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切功能。如,一个日志模块可以被称作日志的AOP切面。根据需求的不同,一个应用程序可以有若干切面。在SpringAOP中,切面通过带有@Aspect注解的类实现。
- 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
- 通知/增强(Advice):在切入点上,可以应用的增强包括:around、before和throws。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。Spring中定义了四个advice:BeforeAdvice,
AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice。
- 切入点(Pointcut):将被增强(Advice)应用的连接点的集合(通常是Method集合)。Spring定义了Pointcut接口,用来组合MethodMatcher和ClassFilter,可以通过名字很清楚的理解,MethodMatcher是用来检查目标类的方法是否可以被应用此通知,而ClassFilter是用来检查Pointcut是否应该应用到目标类上。
- 目标对象(TargetObject):被通知(Advice)或被代理对象。
- AOP代理(AOP Proxy):AOP框架创建的对象,包含通知(Advice)。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
35 Spring AOP的增强/通知(Advice)类型
- Before Advice:在方法执行前执行。
- AfterAdvice:在方法执行之后调用的通知,无论方法执行是否成功。
- After ReturningAdvice:在方法执行后返回一个结果后执行。
- After ThrowingAdvice:在方法执行过程中抛出异常的时候执行。
- Around Advice:在方法执行前后和抛出异常时执行,相当于综合了以上三种通知。(相关接口MethodIntercept)
- IntroductionAdvice(引入增强):引入通知是一种特殊的通知,它能将新的成员变量、成员方法引入到目标类中。它不能作用于任何切入点,因为它只作用于类层次,而不是方法层次。实现引入通知需要实现IntroductionAdvisor和IntroductionInterceptor接口。
http://chenjumin.iteye.com/blog/364948
36 Spring AOP 的关注点和横切关注的区别
- 关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
- 横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。
http://blog.csdn.net/shendl/article/details/526362
37 引入(Introduction)的概念
引入(Introduction):添加方法或字段到被通知的类。Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现IsModified接口,来简化缓存。Spring中要使用Introduction,可有通过DelegatingIntroductionInterceptor来实现通知,通过DefaultIntroductionAdvisor来配置Advice和代理类要实现的接口。
38 Spring有几种自动代理器
代理器有三类:
- 基于Bean的名字的自动代理创建器,例如BeanNameAutoProxyCreator
- 基于Advisor(切面)匹配机制的自动代理创建器。对spring容器中的所有的Advisor扫描,并将其应用到匹配的Bean中。例如DefaultAdvisorAutoProxyCreator
- 基于Bean中的AspjectJ注解标签的自动代理创建器,例如AnnotationAwareAspectJAutoProxyCreator
所有的自动代理创建器,都是实现了BeanPostProcessor。spring容器在实例化Bean时,BeanPostProcessor会对其加工,对满足匹配规则的Bean自动创建代理对象。
http://blog.csdn.net/itomge/article/details/8861268
http://uule.iteye.com/blog/894055
39 Spring织入概念
织入(Weaving):把切面(Aspect)应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机:
- 编译时:当一个类文件被编译时进行织入,这需要特殊的编译器才可以做的到,例如AspectJ的织入编译器。
- 类加载时:使用特殊的ClassLoader在目标类被加载到程序之前增强类的字节代码。
- 运行时:切面在运行的某个时刻被织入,SpringAOP就是以这种方式织入切面的,原理应该是使用了动态代理技术。
40 Spring AOP的实现方式
1、经典的基于代理的AOP:使用Java代码实现,编写Advice、PointCut,然后提供给Advisor使用。开启自动代理后,即可在applicationContext中获得增强后的bean。
http://blog.sina.com.cn/s/blog_5198c7370100hw1p.html
2、@AspectJ注解驱动的切面:基于注解的开发(推荐使用),在项目中需要开启AOP自动代理<aop:aspectj-autoproxy/>。
3、XML Schema方式:需要实现相应的增强接口,如BeforeAdvice、AfterAdvice等。然后利用一下配置如:
<aop:config>
<aop:aspectref="sleepHelper">
<aop:beforemethod="beforeSleep" pointcut="execution(**.sleep(..))"/>
<aop:aftermethod="afterSleep" pointcut="execution(**.sleep(..))"/>
</aop:aspect>
</aop:config>
http://hyhai7.iteye.com/blog/837497
Java面试--Spring技术要点--Spring AOP(面向切面编程)
标签:spring面试 java 面试 aop spring
原文地址:http://blog.csdn.net/fouy_yun/article/details/45703749