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