spring 学习之AOP的实现方式和原理

一.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编写的方法和目标类连接起来

 

-------------------------持续更新——————————————————————————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值