您的位置:首页 > 编程语言 > Java开发

Spring(Struts、Hibernate优势 + Spring IOC、AOP + Spring实际开发过程)

2015-08-16 16:54 239 查看
Struts:Action

Hibernate:DAO(一个接口,一个实现类)

Spring:Bean的管理-->Spring容器(IOC、AOP)

Struts2:优势:(最主要的是前两点)

基于MVC思想,将模型返回的数据与显示逻辑分离。

提供内存式的数据中心,所有可供访问的数据都集中在内存中,所以调用中不需要将数据库传来传去,只需要在这个内存数据中心访问即可;

强大的标签;

良好的Ajax支持。

Hibernate优势:业务逻辑层不需要考虑数据库具体操作内容,只需要调用DAO接口中的相应方法(把相应对象传入、传出),就可以实现底层数据库的操作。

对于Hibernate,不用知道他们怎么实现的,我只需要去声明UserDAO接口,用UserDAOImpl对象实例化它,之后调用UserDAO接口中的方法,就可以实现与数据库的交互!(一般是在Action类对象中,进行操作)

Spring专注于基础设施,这使得开发者可以更好地致力于应用开发而不用关心底层的架构。

其核心功能适用于任何Java应用。对于Web程序来说,一般用在服务端。

Spring优势:业务层框架

能有效地组织中间层对象。例如:Struts2与Hibernate框架

面向接口编程,可实现组件之间的高度解耦,而面向接口编程是一种良好的编程习惯。

提高了代码的可重用性。

为数据存储提供了一个一致的框架,简化了底层数据库的访问方式。

IOC:依赖注入(控制反转)

传统:由调用者创建被调用者的实例;Spring框架中,调用者不负责被调用者的实例创建工作,转由Spring容器来控制,创建后再注入调用者。(降低了Java实例对象之间耦合性)

AOP:面向切面编程

是面向对象编程(OOP)的补充和完善。

当需要为多个分散对象加入一些公共行为时,OOP就显得力不从心了,换句话说,OOP定义的是从上到下的关系,但是并不适合定义从左到右的关系。

切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

Spring框架模块

·核心容器:Core Container

Beans和Core模块实现了Spring框架最基本的功能,规定了创建、配置和管理Bean的方式,提供了IOC的特性。

·数据访问/集成模块:

由JDBC、ORM、OXM、JMS和Transaction这几个模块组成。

其中ORM模块为主流的对象关系映射API提供了集成层(包括Hibernate、IBatis等)

·Web模块

包括Web、Servlet、Struts、Portlet等几个模块,提供了额Spring的Web应用MVC实现。

·AOP和Instrumentation模块

面向切面编程的实现

·Test模块

支持使用JUnit和TestNG对Spring组件进行测试。

IOC好处:

解耦对象之间的依赖关系:当调用者需要被调用者时,调用者不需要知道被调用者的具体实现细节,只需要从容器中拿出一个对象使用就可以了。

例如:一个人需要一辆车,需要自己“创造”。

但是!当车辆属性等有变化时,就需要先改变车辆类,之后在人的操作方法中改变相应的内容。(可能有多处生成车辆,需要多处变化)。使用注入可以解决此类问题,只需要在Spring容器中改变相应内容即可,在使用的地方只改变使用新功能的部分。

这样的话,其是很类似于工厂模式的。

但是!在Spring中,其又进一步省略了寻找工厂的过程:当需要一个汽车对象时,Spring容器会自动将汽车对象注入到调用者对象中。

(核心是只需更改配置文件,少量动项目文件即可。)

实际开发过程:

先定义dao接口,其次实现dao接口(数据库连接等),再定义同类型的service接口(类似于action,由web层调用),再实现service接口。

Service层完成纯粹的业务逻辑,数据操作是通过注入dao接口来实现的。

3种依赖注入的实现方式:

·设值注入

Service中定义一个dao接口实例,但是由注入的方式设值。如下所示:

<bean id=”u” class=”com.UserDAOImpl”/>

<bean id=”userService” class=”com.UserServiceImpl”>

<property name=”userDAO”> //这个实在定义UserService时,类中定义的属性

<ref bean=”u”/> //注入前面定义的UserDAOImpl实例。

</property>

</bean>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: