首页 > 编程知识 正文

dubbo原理和机制 面试,spring原理及流程面试

时间:2023-05-05 00:58:50 阅读:32274 作者:660

一、什么是AOP? AOP的全名是Aspect Orient Programming,即面向切面编程。 它是对对象编程(OOP )的补充,战斗门用于处理具有横向性质的服务。 常用于日志输出、安全控制等。

以上是对OOP的补充,那么具体补充了什么呢? 想想一个案例。 如果所有方法都需要在执行之前打印一句日志并遵循OOP的处理思想,则必须在每种业务方法开始时添加一些语句。 但是,如果我们辛苦添加后,要求在这个日志打印后再打印一文,那需要再添加一次吗? 此时,我认为面向对象的编程思想是在一个类中创建日志打印方法,该方法执行这些日志打印操作,然后在每个业务方法之前添加此方法调用。 但是,如果要求在业务方法结束时打印日志,在业务方法结束时需要再添加一次吗? 这不是经常的方法。 另外,我们总是在改变业务方法。 业务方法中混入了太多其他操作,入侵性太高了。

此时,APP发挥作用。 我们可以创建切片类(Aspect ),用其中的方法创建横断面逻辑(横断面逻辑),然后用设置或注释声明横断面逻辑工作的位置。

二、实现技术?

AOP (这里的AOP是指面向切片的编程思想,而不是Spring AOP。 (主要实现技术为Spring AOP和AspectJ。

1、AspectJ基础技术。

AspectJ的基础技术是静态代理,它使用AspectJ支持的特定语言创建片,然后用一个命令编译生成新的代理类。 这个代理类加强了商务舱。 这在编译时得到增强,在编译时得到增强的性能比下面介绍的运行时增强的性能更好。

2、Spring AOP

Spring AOP采用动态代理,并在运行时增强业务方法,因此不会生成新类。 在动态代理技术方面,Spring AOP提供JDK动态代理支持和CGLib支持。

JDK动态代理只能为接口创建动态代理实例,而不能为类创建动态代理。 获取目标类的接口信息(应用Java的反射技术),生成实现代理接口的动态代理类(字节码),通过反射机制获取动态代理类的构造函数, 必须利用构造函数生成动态代理类的实例对象,并在调用具体方法之前调用invokeHandler方法进行处理。

CGLib动态代理依赖于asm包,需要读取被代理对象类的class文件并修改其字节码以生成子类。

但是,如果Spring AOP是基于注释的设置,则它必须依赖于AspectJ包的标准注释,但不需要额外的编译和内置AspectJ,也不需要基于XML的设置。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。