• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zhecaoli
V2EX  ›  程序员

spring ioc 的好处???

  •  
  •   zhecaoli · Apr 18, 2018 · 3737 views
    This topic created in 2972 days ago, the information mentioned may be changed or developed.

    都说 spring ioc 的好处是可以在切换调用新增的业务方法的时候,不需要修改一行代码,也不需要重新编译,只需要修改配置文件 spring.txt ,再运行即可。

    但是,我很好奇:这个新增的业务类是怎么放进去 jar 包的?我看网上的文章总是说直接修改配置文件,难道这个新增的业务类本来就在 jar 包了吗?)还是说通过 jar uf 来塞进去?大神们有过这样的实战经验吗?

    18 replies    2018-04-18 17:28:00 +08:00
    Cbdy
        1
    Cbdy  
       Apr 18, 2018 via Android
    原因只是因为 Java 不支持 object 关键词
    zhecaoli
        2
    zhecaoli  
    OP
       Apr 18, 2018
    @Cbdy 啥?
    zjp
        3
    zjp  
       Apr 18, 2018 via Android   ❤️ 1
    修改 Spring 配置文件能够替换掉 bean 的方法,但新的类总归还是要打包进去。正确的表述应该是"不需要修改一行原有代码,也不需要重新编译旧代码"……感觉是在浮夸吹捧 Spring …

    楼上说的是 Java 不原生支持单例
    cloudzhou
        4
    cloudzhou  
       Apr 18, 2018
    你去关注一下几个关键词:

    面向接口编程 /依赖,注入,依赖接口而不是实现,等等
    zhecaoli
        5
    zhecaoli  
    OP
       Apr 18, 2018
    @zjp 嗯,这样说就好理解了,新增的类编译后 重新打包,省掉的是编译原来的代码的时间, 没有很大的代码量的公司确实没有这样的经历。。。谢谢了
    lhx2008
        6
    lhx2008  
       Apr 18, 2018 via Android
    ioc,在组织方式上更加灵活,可以完全控制对象的生命周期,而且可以先实现接口不实现类,最后再按类型注入,这样开发过程中就互不干扰,互不依赖。
    aop 的好处就不说了
    zhecaoli
        7
    zhecaoli  
    OP
       Apr 18, 2018
    @cloudzhou 我理解这些概念,只是对于这种操作有疑惑:“ 不需要修改一行代码,也不需要重新编译,只需要修改配置文件 spring.txt ,再运行” , 我好奇在线上怎么进行这种切换呢
    zhecaoli
        8
    zhecaoli  
    OP
       Apr 18, 2018
    @lhx2008 只看标题就回答了吧😂
    zjp
        9
    zjp  
       Apr 18, 2018 via Android
    @zhecaoli #5 我还是学生…只是试过 Spring 里方法替换的功能……
    其他楼层都在回答你的标题…这标题误导了……
    lhx2008
        10
    lhx2008  
       Apr 18, 2018 via Android
    @zhecaoli 这种意义不大,打包的时间又不用很久,而且大部分都用注解了。
    zhecaoli
        11
    zhecaoli  
    OP
       Apr 18, 2018
    @zjp 也没办法修改了看来,没有 stackoverflow 那么方便
    zhecaoli
        12
    zhecaoli  
    OP
       Apr 18, 2018
    @lhx2008 嗯,基本都用了注解了,也就是说现在 spring ioc 这种免编译的好处 是可以忽略的了?
    lhx2008
        13
    lhx2008  
       Apr 18, 2018 via Android
    jar 包运行的时候肯定是已经解压了的,可以替换 class,这种也和 spring 没关系。但是意义不大,具体可以看热更新的一些技术。
    rensuperk
        14
    rensuperk  
       Apr 18, 2018
    我怎么感觉楼上的都偏题了。。。
    nl101531
        15
    nl101531  
       Apr 18, 2018
    IOC 只是业务上的解耦. 比如我最近写的一个观察者模式,所有的观察者在 Subject 中可以 Spring 容器启动完毕后自动注入.
    这样我新增观察者只需要写一个实现对应观察者接口的类,让 Spring 管理就好了,其他都不用理会.这就是一种解耦.

    ```java

    private void initPaidObserver(ContextRefreshedEvent event) {
    Map<String, OrderPaidHandlerObserver> matchingBeans =
    BeanFactoryUtils.beansOfTypeIncludingAncestors(event.getApplicationContext(), OrderPaidHandlerObserver.class, true, false);
    this.paidObservers = Collections.unmodifiableList(Lists.newArrayList(matchingBeans.values()));
    if (this.paidObservers.size() <= 0) {
    throw new IllegalStateException("OrderPaidHandlerObserver not found");
    } else {
    log.info("initPaidObserver finish, observer is {}", matchingBeans.keySet());
    }
    }

    ```
    earendil1412
        16
    earendil1412  
       Apr 18, 2018 via Android
    你不写单元测试?
    如果没有 IOC,没有数据库的情况下要测试 Service 怎么办
    hsuan
        17
    hsuan  
       Apr 18, 2018 via Android
    简单来说,IOC 的好处就是解耦
    Inside
        18
    Inside  
       Apr 18, 2018
    建议把 spring 去掉,ioc 不是 spring 特有的。
    你去看看宇宙最好的语言写出来的 laravel,照样 ioc+各种依赖注入。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1180 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 23:43 · PVG 07:43 · LAX 16:43 · JFK 19:43
    ♥ Do have faith in what you're doing.