SSH中Spring的作用是什么

Struts和Hibernate的作用很清楚,一个负责MVC,一个负责持久化。但是Spring的作用呢?Spring统管了Struts和Hibernate,通过IOC改变了类的实例化方式,仅仅是这样吗?
我感觉没有Spring也没有什么不好啊,就直接New吗,有什么问题呢?

8个回答

[quote]
我只是无法理解代码复用,我觉得Action和Service都是对应具体功能的,怎么可能在其它功能里复用。。。。
[/quote]

你指的是功能复用,而我指的是程序的通用性复用,就是说,这部分代码从这个应用里剥离出来,我放到其他应用可以马上就位。

用struts干嘛,直接自己MVC啊,用hibernate干嘛,直接写jdbc啊 :D

Spring不光是有IOC,还有AOP。

IOC的好处:

被注入对象不需要主动的去控制一个被依赖对象,而是通过注入的方式,由IOC Service provider(只是一个抽象概念,可以引伸出Spring容器)来提供给你,这样你就不必操心创建实例的问题,更关注于业务逻辑。

一切的框架,都是为了让您更关注于业务逻辑,而不为其他的事操心。

补充一下,没有主动依赖的对象是干净的,可以提高代码复用率。

企业应用的项目你就知道IOC和AOP的强大了,小项目一般优势不明显。
现在到了spring3.x已经实现了注解形式,可以更加轻便的进行开发。

[quote]
这个能举个例子吗?
比如我做个登陆,action调用service,service调用dao
原来都是New的,现在改用Ioc了,只是不用New了。但是登陆的Service和Action怎么可能被复用呢?
其它功能也是一样啊,一个功能对应一个Action和Service,完全不相关的,怎么会有机会复用呢?
[/quote]

不知道你知不知道测试驱动开发,在设计action的时候,service往往使用的是mock形式的,而不是真的一个service,如你说的那样new一个对象,action就完全依赖mock service,等你写完了真正的service,你还要到头来修改action里面依赖的对象,如果程序出了问题,你又要去修改action里依赖的对象,改成mock形式的,进行测试,反反复复,你觉得方便吗?而且action和service是一对多的关系,我可以想象维护起来有多恐怖...我只是举个例子,实际还有很多这种情况。

Spring容器时产生Bean的工厂(BeanFactory),用于管理容器中的Bean。
1.IOC(控制反转)
通过BeanFactory找到相应的Bean,方法是getBean("id")
id:applictionContext.xml中配置的bean中的id属性
具体由谁来实现,具体操作中不实现,交由spring来进行处理(即class属性)

2.DI(依赖注入)
让bean与bean之间以配置文件组织在一起,而不是以硬代码的方式耦合在一起,

架子在了,一次配置好了,就可方便复用。
逻辑清楚,方便维护!

其实用spring最好的地方就是实现代码的复用。
首先spring的设计原则是非侵入性的,就是实际业务逻辑代码中感觉不到spring框架的存在,spring只是在其中起到一个实例产生的作用,然后把实例分配给需要的对象。这种设计的好事就是可以随时随地的把某个业务逻辑很轻松的从整个系统中抽离出来再在无任何修改的情况下用到其他系统中去。
然后就是切面的编程,这种设计是灵活的操作织入,例如你的某个业务逻辑是执行存款,存款这个业务之前之后都应该有某些附加操作,例如用户登录,检查余额,记录存款日志信息,但是这些不能够放在存款主业务当中,这个时候就可以用面向切面的方式灵活织入到存款业务中,但是这个过程有不需要改变原存款业务代码和逻辑实现。如果将来某个时候这些副业务刚改,例如我不想记录存款日志信息,但是我又要加入打印出存款细节的附加操作,这个时候只要把记录日志剥离出来,再植入打印功能。同样不需要更改源代码。

spring这些设计的终极目标就是避免同样或者相似功能在不同系统中的重复开发而设计的

[quote]
TDD我懂!!!

我只是无法理解代码复用,我觉得Action和Service都是对应具体功能的,怎么可能在其它功能里复用。。。。
[/quote]

说的再明白点吧,一个项目结束,开始另一个项目,业务可能是一样的,不一样的是实现,控制业务的action不必去改,实现对应依赖的service就行了,只要name或者type相同,就可以直接注入到action,你需要去改action的依赖对象吗?不需要...就怎么简单...

一个是自己造轮子,一个是IOC容器造好轮子给你使...你非要说,我自己造不行吗?反正也不难,然后就在这部车上装好了轮子,当碰到雪天,自己就得拆卸掉轮子,自己造个雪地轮装上去,而不是省这个心,让车厂帮你操劳...当然,你觉得自己造非常好,那就自己造,自己造自己的,让别人去说吧!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问