V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zhecaoli
V2EX  ›  程序员

spring ioc 的好处???

  •  
  •   zhecaoli · 2018-04-18 15:22:09 +08:00 · 3307 次点击
    这是一个创建于 2437 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    楼上说的是 Java 不原生支持单例
    cloudzhou
        4
    cloudzhou  
       2018-04-18 15:41:20 +08:00
    你去关注一下几个关键词:

    面向接口编程 /依赖,注入,依赖接口而不是实现,等等
    zhecaoli
        5
    zhecaoli  
    OP
       2018-04-18 15:42:19 +08:00
    @zjp 嗯,这样说就好理解了,新增的类编译后 重新打包,省掉的是编译原来的代码的时间, 没有很大的代码量的公司确实没有这样的经历。。。谢谢了
    lhx2008
        6
    lhx2008  
       2018-04-18 15:45:02 +08:00 via Android
    ioc,在组织方式上更加灵活,可以完全控制对象的生命周期,而且可以先实现接口不实现类,最后再按类型注入,这样开发过程中就互不干扰,互不依赖。
    aop 的好处就不说了
    zhecaoli
        7
    zhecaoli  
    OP
       2018-04-18 15:45:13 +08:00
    @cloudzhou 我理解这些概念,只是对于这种操作有疑惑:“ 不需要修改一行代码,也不需要重新编译,只需要修改配置文件 spring.txt ,再运行” , 我好奇在线上怎么进行这种切换呢
    zhecaoli
        8
    zhecaoli  
    OP
       2018-04-18 15:46:09 +08:00
    @lhx2008 只看标题就回答了吧😂
    zjp
        9
    zjp  
       2018-04-18 15:48:37 +08:00 via Android
    @zhecaoli #5 我还是学生…只是试过 Spring 里方法替换的功能……
    其他楼层都在回答你的标题…这标题误导了……
    lhx2008
        10
    lhx2008  
       2018-04-18 15:50:26 +08:00 via Android
    @zhecaoli 这种意义不大,打包的时间又不用很久,而且大部分都用注解了。
    zhecaoli
        11
    zhecaoli  
    OP
       2018-04-18 15:50:44 +08:00
    @zjp 也没办法修改了看来,没有 stackoverflow 那么方便
    zhecaoli
        12
    zhecaoli  
    OP
       2018-04-18 15:52:41 +08:00
    @lhx2008 嗯,基本都用了注解了,也就是说现在 spring ioc 这种免编译的好处 是可以忽略的了?
    lhx2008
        13
    lhx2008  
       2018-04-18 15:52:44 +08:00 via Android
    jar 包运行的时候肯定是已经解压了的,可以替换 class,这种也和 spring 没关系。但是意义不大,具体可以看热更新的一些技术。
    rensuperk
        14
    rensuperk  
       2018-04-18 16:10:52 +08:00
    我怎么感觉楼上的都偏题了。。。
    nl101531
        15
    nl101531  
       2018-04-18 16:32:26 +08:00
    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  
       2018-04-18 16:46:14 +08:00 via Android
    你不写单元测试?
    如果没有 IOC,没有数据库的情况下要测试 Service 怎么办
    hsuan
        17
    hsuan  
       2018-04-18 17:14:53 +08:00 via Android
    简单来说,IOC 的好处就是解耦
    Inside
        18
    Inside  
       2018-04-18 17:28:00 +08:00
    建议把 spring 去掉,ioc 不是 spring 特有的。
    你去看看宇宙最好的语言写出来的 laravel,照样 ioc+各种依赖注入。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3447 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:27 · PVG 12:27 · LAX 20:27 · JFK 23:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.