• spring核心原理猜测


    说是猜测,实在是我也没彻底研究过

    由于前几日面试官突然砸过来这么个问题:“说说Spring的原理”(应该很多做应用开发的人这时候心中万马奔腾了),当时没个头绪,现在想来记录一下便是

    提起Spring,大家其实最多谈论的几个关键词是ioc、aop、容器等

    IOC(Inversion of Control)本身代表的是依赖倒置,也作:"请别联系我,需要的时候我会联系你"的意思来解(也叫做好莱坞原则,或者也可以叫做大牌原则:别找我,有事我会联系你)

    其实这个在前端框架中经常会遇到,特别是JavaScript的框架(一般常见于模块化,因为模块相互独立,需要使用到的时候“联系”下这个模块即可)

    例如最近比较火的 angularjs便是如此

    那么什么是依赖倒置呢,如果用术语来解释,不仅很多人听不懂,我也不知道如何讲起,索性用些通俗的语言来讲

    所谓的依赖倒置,就是:一个cpu它不依托于电脑,因为电脑比cpu更高级,而cpu是组成计算机的一部分。这是所谓的底层组件不依赖高层组件。

    也就是常见的模块注入:

    app.use(['grid'], function(Grid) {
        // 这边的Grid对象就是在我需要的时候被加载了,如果我不需要,你爱呆哪呆哪
    })

    在spring中,可以体现为私有变量不需要通过new来持有对象,而是在需要使用的时候通过容器来注入

    说到这,就必须要说到AOP(Aspect Oriented Programming): “面向切面编程”

    说是切面,其实没啥太特殊的意思,就是从不同的角度来看待问题的意思

    可以这么来理解,我们的业务代码所不需要关注的一面,比如说我们实现了一个支付的代码,但是我们需要在前后记录日志,可是我们又不想要在代码里面切入操作日志

    这时候我们就可以使用AOP,它实际上也是种动态代理(实现的原理)

    实现的方式就是私有化实际对象,然后在实际方法的调用前后加上新的逻辑代码,如同记录日志,就多半是在实际方法调用的后边来执行

    下面是一个简单的代理实现代码,实际上的动态代理就需要用到反射了:

    public class Proxy {
        private RealClass realClass;
    
        public void talk() {
           before();
           realClass.talk();
           after();
       }
    }

    所故,实际spring使用了工厂模式来作为容器管理,动态去代理bean,实现依赖倒置原则,代理也使得aop切面的操作得以实现。

    IOC解决了创建对象的耦合性问题,AOP则帮助Spring实现最小侵入性,因为不需要直接将代码嵌入业务逻辑中,而只需要在代理实例中处理即可。

    我大致的理解就是这样了,先记录下想法,后续验证

  • 相关阅读:
    Sublime Text 3下载安装以及安装HTML-CSS-JS Prettify代码格式化插件
    eclipse升级Android SDK Tool版本到25.2.5后运行项目报错Unable to build: the file dx.jar was not loaded from the SDK folder
    MySQL字符集与排序规则总结
    windows版mysql安装
    maven 引入qrcode.jar
    Java Web 项目目录规范
    JAVA WEB项目目录结构以及web应用部署的根目录,编译路径和项目根目录的区别
    java实现二维码的生成和解读
    <![CDATA[]]>和转义字符
    jvm参数调优
  • 原文地址:https://www.cnblogs.com/gabin/p/6435865.html
Copyright © 2020-2023  润新知