一.AOP理解
对于Spring的aop 是通过代理模式,将目标对象的方法+ 需要的增强处理,在程序运行时期,在内存中动态的生产代理类,并且一切都是由ioc容器生产bean和依赖。
包括通过jdk动态代理模式和cglib代理模式,
jdk动态代理模式 :通过反射和动态编译 ,动态的生成代理类,两个核心分别是InvocationHandler和Proxy,通过proxy 生成代理类
程序需要我们做的内容就是
①声明aspect这个bean
②定义切入点(扫描的类,切入点,切入的方法)
③定义切入方法(编写需要增强的方法)
二.常见问题理解。还是 透过问题看本质吧
2.1描述一下Spring AOP
SpringAop 英文Aspect Orient Programming,面向切面编程,他不同于我们传统的编程理念,传统我们在编码时,我们对业务A从上而下依次编写,而aop是横向的把一部分功能抽离出来。这么说比较抽象,就像我们在实现业务A的时候可能需要在某个地方打印日志,在业务B的某个地方可能也需要打印,这个时候我我把日志这个功能抽象出来,将打印功能很具体的客户业务实现分离,然后在业务里面需要打印日志了我就调用下。 然后我减少了侵入性,因为在编码的时候我专心致力于业务代码的实现,所有与本业务无关的其他尽量减少。
2.2 Spring AOP的实现方式
2.1 通过配置xml文件的方式
<!-- 切面: -->
<bean id="myAspect" class="cn.happy.aop.MyAspect"></bean>
<aop:config>
<!-- 配置切入点 -->
<aop:pointcut id="pointcut" expression="execution(public * *..Iservice.log(..))"/>
<!-- 将类方法定义为最终增强并引用pointcut切入点-->
<aop:aspect ref="myAspect">
<aop:after method="myafterReturning" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
2.2 通过注解
2.2.1 建立切面类
申明切点@pointcut +@几种通知类型
2.2.2 配置文件中配置注解
<!-- 配置注解扫面路径 -->
<context:component-scan base-package="com.lilin" />
<!-- 开启注解 -->
<context:annotation-config />
<!-- 开启aspectj代理 -->
<aop:aspectj-autoproxy />
2.3 Spring中有哪些不同的通知类型(advice types):
@before
@after
@afterreturn
@afterthrow
@around
2.4一句话解释基本的概念:
引介(Introduction)是什么? 对目标类没有实现的类 连接点(Joint Point)和切入点(Point Cut)是什么? 连接点 标出哪个类哪个方法需要切入,切入点 指出切入的方法 将连接点和切入点连接起来一起使用 织入(Weaving)是什么?把我们的aop编写的方法和目标类连接起来
-------------------------持续更新——————————————————————————