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

来源:互联网 发布:中国电信测速软件下载 编辑:程序博客网 时间:2024/05/18 04:01

StrutsAction

HibernateDAO(一个接口,一个实现类)

SpringBean的管理-->Spring容器(IOCAOP

 

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

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

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

强大的标签;

良好的Ajax支持。

 

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

 

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

 

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

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

 

Spring优势:业务层框架

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

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

提高了代码的可重用性。

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

 

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

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

 

AOP:面向切面编程

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

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

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

 

Spring框架模块

·核心容器:Core Container

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

·数据访问/集成模块:

JDBCORMOXMJMSTransaction这几个模块组成。

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

·Web模块

包括WebServletStrutsPortlet等几个模块,提供了额SpringWeb应用MVC实现。

·AOPInstrumentation模块

面向切面编程的实现

·Test模块

支持使用JUnitTestNGSpring组件进行测试。

 

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>

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击