首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring aop (上) aop概念、使用、动态代理原理

参考Spring AOP详细介绍 AOP(Aspect Oriented Programming)面向切面编程。面向切面,是与OOP(Object Oriented Programming)面向对象编程并列的编程思想。 通过定义切面,可以让一些业务无关的代码,与业务代码相解耦。比如要在业务方法执行前后打印日志时,我们只需定义一个切面,而不用把打印日志的代码加到业务方法中,这样就将日志打印代码和业务代码相解耦了。 它有几个概念:Aspect(切面)、JointPoint(连接点)、Advice(通知)、Pointcut(切入点)、AOP代理。概念的详细解释见Spring - 通知(Advice)和Advisor(增强器/顾问)和Spring AOP详细介绍。 切面有两种实现:Advice(通知)、Advisor(增强器)。两种实现的区别其实都是将通知和切面进行了封装,原理基本上是一样的,只是使用的方式不同而已。详情可参考<aop:aspect>与<aop:advisor>的区别。

05
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spring AOP

    Spring AOP 使用场景蛮多的属性检查、日志等,所有拦截下来可以在切面共同做的事儿似乎都可以用AOP(面向切面)的方式解决。在面试的过程中AOP 也是除Ioc及MVC 以外问的较多的一个点,通常是这样的: AOP 是什么?面向切面编程。 Spring AOP 是如何实现的? 配置下拦截器,完成具体的处理逻辑,其实本质就是一个动态代理。 那Spring 实现动态代理的方式有哪些?CGLib、JDK 原生 那这两种方式默认使用哪一种,如何指配?#&@¥&@¥&@#¥& 那JDK 原生方式与CGlib 区别说一下?&&#¥#¥ 提到了CGlib的实现是ASM,那ASM 具体的原理是怎样的?#&@¥&@¥&@#¥& 说一下ASM 几个核心的函数?#&@¥&@¥&@#¥& 说一下ASM 操作的过程中,JVM 里都发生了哪些事儿?#&@¥&@¥&*@#¥& 刚才说了这么多反射还有JVM 相关的,如果使用反射的方式向一个List<String> ,插入一个Integer,是正常还是Error,为什么? 好的,咱来谈谈泛型的擦除。所以会很容易被转移话题的。 其实AOP 相对于具体语言的实现细节,最主要的是它的实现思想。 先说一下思想: AOP 面向切面编程,算是对oop 面向对象编程的一种补充,指的在许多流程中都存在某些点需要做类似的事儿,可以将这个点设置为横切关注点(相对的业务处理的是核心关注点),完后完成对应事件的设定。 这种场景比如说权限检查、日志等。。 要理解整个AOP 过程还需要一点关键词: 横切关注点: 具体需要拦截的点,一种发现的过程 切面(aspect): 对横切关注点的一种抽象,一种抽象的过程 连接点(joinpoint):要被拦截到的具体点 切入点(pointcut):对于连接点进行,一种设置拦截定义的过程 通知(advice):具体就是指的拦截到具体的连接点之后的要执行的逻辑代码,分为:前置、后置、最终、环绕 这五类通知 目标对象:代理的目标对象 织入(weave):将切面应用到目标对象,并创建对应对象代理创建的过程 引入(introduction):动态代理运行的过程 然后是AOP 后续具体的使用细节及实现原理: 使用过程大体是这样的: 1、检查业务组件,查看是否存在大量可横切点 2、定义切入点 3、定义增强处理,就是切入点前后的具体通知 4、设置完成,实现对应AOP 操作 Spring 对AOP 的支持是建立在Ioc 的基础上的,也就是AOP 代理有Ioc 容器负责处理依赖关系,及其生成和管理。 那么Spring AOP 所依赖的Ioc 里面使用代理的方式是默认使用JDK 原生方式,也可以选配CGlib实现。 在使用层面上,JDK 要求实现接口,而CGlib 不用,可以基于类实现。 JDK 是根据接口实现一个具体的class 对象然后加载到具体的堆和方法区完成的实现。 CGlib 是依赖于ASM ,通过字节码操作根据现有的类,通过添加字节码的方式构建一个新的对应类的子类来完成对应的实现。 就当前阶段来说两者在小规模调用差异基本是不大的,当前hibernate 用的就是ASM 方式实现的懒加载。

    01

    springaop的原理_javaaop原理

    Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。

    03

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券