Spring 是干什么的? 能具体举出一个例子吗?比如,写一个 留言板程序,会用到 Spring 吗?

2014-06-27 15:52:57 +08:00
 yanerweb
从2001年开始接触 Java,到现在为止,也不明白 Spring 具体在实际工作中是做什么的。
比如,我写一个 留言板程序,或者 小型的CMS程序,或者最基础的 CRUD程序,Spring 在
里面能干什么,谢谢。
8698 次点击
所在节点    Java
44 条回复
Navee
2014-06-27 16:48:49 +08:00
@yanerweb 好比如你有两个类:
class A {
private B b = new B();
}
class B {
public void sayHello(){
System.out.println("hello");
}
}
这是传统的实现,A类中要调用B类的方法,必须有B的实例,所以A里面就创建了一个B的实例
下面说一下ioc是什么:
如果用ioc 依赖注入的思维来想这个,那么A类是依赖与B类的,因为这个地方没有了B类,new B将会不成立,虽然有了依赖注入,这个地方也会不成立,所以和ioc一起使用的就是接口:
class A {
private IB b;
}
interface IB{
public void sayHello();
}
class B implements IB{
public void sayHello(){
System.out.println("hello");
}
}
现在这样A类就不依赖与B类了,而是依赖与IB接口,现在要做的就是,把B的实例注入到A的b属性中
spring ioc在这段代码中的作用就是创建B实例,然后在创建A实例的时候将B的实例设置到A的属性b之中.
注意,这里的B实例,A实例并不是类似与上面那样我们手动new一个,而是通过spring 的BeanFactory创建的.
yanerweb
2014-06-27 16:54:15 +08:00
@xmuxsp 谢谢,您的理解,我更加看不明白了。
incompatible
2014-06-27 16:54:48 +08:00
@Navee 不过说句实在的,我在工程中从来没有遇到过不改代码只改xml就可以解决问题的情况
尤其component-scan和@Autowired、@Qualifier开始流行以后,几乎也不用写xml了
maikcn
2014-06-27 16:55:09 +08:00
Sping不能解决什么,它只能提供一种架构思维

比如IoC,能让用家忽略我调用的对象是怎么来的,要怎么new,用完以后又怎么样(因为生存周期给Spring管理了)
比如AOP,能让你忽然想在某个切面上添加一点小log而不用 find + replace 所有业务代码

如果做留言板之类简单的CRUD什么的小应用,完全不用也没关系
如果做分布式的大应用,那Spring提供了一些便于拆分和调用的思路和方法,当然不用Spring也完全可以有其他办法做到
wenLiangcan
2014-06-27 16:56:51 +08:00
推荐看看 Just Spring 这本书,很薄的,可能 60 页不到
solupro
2014-06-27 17:01:24 +08:00
说到依赖注入想到了一篇文章 http://coolshell.cn/articles/6950.html
maikcn
2014-06-27 17:02:57 +08:00
这样说吧,我理解的 IoC

就是可以让你代码中少写 new Object(xx,xx,xx) , 也能让系统运行时全局少一点用完即弃的对象,并且这些是面向接口的
vicalloy
2014-06-27 17:12:31 +08:00
楼主真是纯为黑spring而来的啊。
就我感觉spring是java界的“胶水”。
提供了很多非常好用的工具方法,让各种第三方包可以和谐相处。
AOP还是很好用,各类语言也都有类似的实现。Spring的AOP实现算是Java里面做的比较好的。
至于IoC...
我感觉这完全是Java世对构架走火入魔的产物。除非构架确实够复杂,不然大多情况下是完全没必要去做IoC的。很多时候所谓的可复用完全是臆想出来的,凭空把事情搞复杂了。
不过IoC的滥用也不能归结给spring。Java就喜欢讲构架。在spring出现前,很多人还在用更丑陋的方式实现类似的功能。
remnet
2014-06-27 17:17:39 +08:00
if else for……
情何以堪
dallaslu
2014-06-27 18:06:12 +08:00
Spring 是块万用插线板。所有的零件通过 Spring 统一管理,可做到根据需要随时替换。

你的组件所需要的零件,原本是在类内部自己创建,现在都由 Spring 来装配。组件需要 Spring “注入”所“依赖”的零件,把装配的权利交给外部的 Spring,也就是“依赖注入”,也叫“控制反转”。
xiaowangge
2014-06-27 18:21:31 +08:00
基于 Annotation Spring MVC

@Controller
@RequestMapping("/xxxx.json")

Spring的核心:依赖注入/控制反转
RisingV
2014-06-27 18:52:31 +08:00
http://martinfowler.com/articles/injection.html
或许这篇文章会有所帮助
qq2511296
2014-06-27 19:18:36 +08:00
先去了解下面向接口编程
然后再去了解spring 的aop 和ioc 的好处是什么
和你以前的开发会由什么不同……

spring也就是个框架 什么东西都能包容
可以很容易集成很多其他的开源框架
akfish
2014-06-27 19:33:59 +08:00
看了下lz的发帖、回帖记录,来黑的无误,好多人一本正经的上当鸟。。。
welsmann
2014-06-27 19:38:18 +08:00
lz你太无聊了..
Linxing
2014-06-27 20:21:39 +08:00
Spring 框架么?这个问题要怎么回答,你当然可以用 Spring 写个留言板,也可以不用,它只是个框架,提高开发效率而已
moroumo
2014-06-27 21:47:14 +08:00
春天已经过去了,现在是夏天了
falconeye
2014-06-27 23:10:14 +08:00
Expert One-on-One J2EE Development without EJB
harryhao
2014-06-27 23:37:50 +08:00
不是说不能用,只是框架这种东西是要你的代码规模大到一定程度才能真正体会到好与坏的。楼主说的略夸张吧,学了十年……
windyboy
2014-06-28 11:27:35 +08:00
spirng 做的事情很简单,也是所谓依赖注入做的事情。
spring 帮你把要做的事情搭一个架子,但最后要怎样完成这件事情,在运行的时候才决定
数据库连接是一个例子,程序需要数据库连接,需要连接管理,需要事务管理
无论你是用mysql/mssql/oracle,你可以在程序运行的时候才把具体的数据库告诉spring,也就是注入。
不需要在你的程序中去关注具体是什么数据库,每个数据库要如何获得连接,管理事务等等

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

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

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

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

© 2021 V2EX