• 面试知识点总结之Spring的IOC和AOP


    SpringIOC解决的是对象管理和对象依赖的问题

    本来是我们自己手动new出来的对象,现在则把对象交给SpringIOC容器管理
    IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系
    等我们需要用对象的时候,从工厂里边获取就好了

    【控制反转】指的是:把原有自己掌控的事交给别人去处理
    它更多的是一种思想或者可以理解为设计模式
    比如:本来由我们自己new出来的对象,现在交给IOC容器,把对象的控制权交给它方了

    对象无需自行创建或者管理它的依赖关系,依赖关系将被【自动注入】到需要的对象当中去

    主要好处在于【将对象集中统一管理】并且【降低耦合度】
    比如:用SpringIOC可以方便单元测试,对象创建复杂,对象依赖复杂,单例等等,什么都可以交给SpringIOC
    理论上自己new出来的都可以解决上面的问题,Spring在各个场景组合下有可能不是最优解
    但new出来的都可以解决上面的问题,可能你得自己写工厂,得实现一大套东西才能满足需求,写着写着有可能还是Spring那一套
    并且Spring核心不仅仅IOC,除了把对象创建出来还有一整套得Bean生命周期管理
    比如说要实现对象增强,AOP就有,不然还得自己创建代理。。。

    SpringAOP解决得是非业务代码抽取的问题
    AOP底层的技术是动态代理,在Spring内实现依赖的是BeanPostProcessor
    比如需要在方法上诸如写【重复性代码】的非业务代码,就可以利用SpringAOP
    所谓【面向切面编程】在我理解下就是方法前后增加非业务代码

    用AOP来对公司的监控客户端进行封装
    一个系统离不开监控,监控基本的指标由QPS,RT,ERROR等等
    对外暴露的监控客户端只能在代码里写对应的上报信息(灵活,但会与业务代码掺杂在一起)
    于是我利用注解+AOP的方式封装了以下,只要方法/类上带有我自定义的注解
    方法被调用时就会上报AQS,RT等信息,实现了非业务代码和业务代码分离的效果

    项目时怎么把对象交给IOC容器管理的?或者说一般是怎么定义Bean的?
    Spring提供了4种方式,分别是 1. 注解 2.XML 3. JavaConfig 4. 基于GroovyDSL的配置
    一般项目我们用注解或XML比较多,少部分用JavaConfig
    日常业务代码一般用注解来定义各种对象,责任链这种一般配置在XML;【注解】解决不了就用JavaConfig,
    总体还是看项目代码风格,反正就是定义元数据,能给到Spring解析就好了。
    摘自微信公众号Java3y;

  • 相关阅读:
    【bzoj3211】花神游历各国
    四维偏序(K-D-Tree+rebuild)
    【bzoj3295】动态逆序对
    BZOJ3444: 最后的晚餐
    BZOJ3091: 城市旅行
    BestCoder Round #72
    BZOJ2733: [HNOI2012]永无乡
    wc2016总结
    BZOJ4381: [POI2015]Odwiedziny
    BZOJ4196: [Noi2015]软件包管理器
  • 原文地址:https://www.cnblogs.com/cgy-home/p/14522521.html
Copyright © 2020-2023  润新知