请问 springIOC 在代码里的具体实现

2019-01-24 22:57:57 +08:00
 nulihuxi

看了很多关于 springIOC 思想的博客,大多是说应用程序依赖于 IoC 容器,IOC 容器在程序需要的时候注入对象,取代之前需要在代码内 new 对象的情况。 关于 bean 注入 ioc 容器我的理解是:类似于 xml 文件中定义一个个 bean,或者用注解的形式类似 @Service 这种将 bean 注入 ioc 容器。 但是从容器中拿出 bean 我有一些疑惑:在工作中,看别人的代码和大神写的开源软件,除了类似 @autowired 这种形式以外,也要 new 一个个对象,而很少有 getBean 这种形式。 那么请问大家,SpringIOC 思想具体到实际开发中应该是怎样的呢?

2275 次点击
所在节点    Java
8 条回复
j2gg0s
2019-01-25 00:27:07 +08:00
IoC 是什么?
Spring IoC 的实现思路?
IoC 在对 Java 开发的影响?
把想了解的问题可以稍微拆的小一点 && Google
shaohan0228
2019-01-25 10:23:09 +08:00
我觉得 autowired 就已经完成了很多了啊,尤其是业务组件多的时候,一个一个去 new,那不麻烦死了。也不能可能所有都用 Spring 去注入,我创建一个实体类存数据,也用 Spring 那不是太麻烦了。
我之前看到过别的代码中,整个业务流程基于流的,流的每个节点就是直接通过类似 Spring getBean 去获取的,然后组成一个完整的 Flow 去运行。
要去理解的话,应该想一下,如果没有 Spring 这一套东西,你的代码应该怎么去组织,去写,如果你去解决的话,又会采取哪种方式。
话说我的陈年项目中,还是用 XML 呢,注解啥都没用。
nulihuxi
2019-01-25 10:51:44 +08:00
@shaohan0228 我是不是可以理解为在 xml 中定义<bean>以及类似 @Controller、 @Service 等等注解就是向 IOC 容器中注入,当代码中 getBean 或者 @AutoWired 就是从 IOC 容器中取出。因为我没接触过除了 spring 以外的方式开发,所以理解不了没有 spring 这套东西是如何写的....
chanchan
2019-01-25 11:10:10 +08:00
《架构探险——从零开始写 Java Web 框架》说得蛮清楚的
shaohan0228
2019-01-25 11:32:25 +08:00
@nulihuxi 具体 @Controller 后具体的实现,不过之前我们这有过类似的简易写法,指定 package,由一个服务在启动的时候去加载,扫描包下的所有类,构造成一个列,如果需要某个类,就从列中获取,然后由服务单独去反射构造这样。
skypyb
2019-01-25 13:23:44 +08:00
没有 IOC 那你不只能 new 了,Service 啊之类的还得写个 Singleton。怪麻烦的。
IOC 优势在于将对象交给 Spring 管理,将调用者和对象本身进行一个极致的解耦。而解耦在程序设计中是极为重要的。
liukanshan
2019-01-25 14:15:37 +08:00
你的问题是不是用了 IOC 整个项目不应该再出现 new 关键字是吗 ? 用了 SpringIOC 不代表不能使用 new 关键字创建对象,getBean 的方式适合有 Spring Context 的情况下,如果存在很多的 POJO 对象 没有必要都给 Spring 管理 如果硬要这样做 也没有问题 只不过没有必要 你需要修改 Scope 为 prototype 因为 IOC 默认都是单例模式 ,而在一些场景下获取 Spring Context 不太方便 。
nulihuxi
2019-01-25 14:39:38 +08:00
@liukanshan 懂了感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/530408

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX