在分层的web应用系统中,通常将数据操作分为dao数据层和service业务逻辑层,dao层负责对数据的操作,servlet或action通过service层对数据进行读写,而service层对数据的读写依赖于dao 层对数据的操作,因此存在着类之间的依赖。下面我们通过模拟实验理解不同技术对依赖关系的处理。
例1.在传统的模式中,依赖关系是通过构造对象的方式实现的。
创建如下三个类,模拟从dao到service的功能实现:
class dao_class{
public String selectUser(String user){
return "找到了"+user;
}
}
class service_class{
dao_class dao=new dao_class();
public String findUser(String username){
return dao.selectUser(username);
}
}
public class dao_service_controller {
public static void main(String []args) {
service_class service=new service_class();
System.out.println(service.findUser("张三"));
}
}
运行结果为:找到了张三。
程序中,语句:dao_class dao=new dao_class();使得service_class严重“依赖”dao_class,形成紧密的耦合关系,不符合现代编程理念。
例2.传统的通过接口方式减轻service_class和dao_class耦合程度。
interface dao_interface{
String selectUser(String user);
}
class dao_class implements dao_interface{
public String selectUser(String user){
return "找到了"+user;
}
}
class service_class implements service_interface{
dao_interface dao;
public void setDao(dao_interface dao){
this.dao=dao;
}
public String findUser(String username){
return dao.selectUser(username);
}
}
public class dao_service_controller {
public static void main(String []args) {
service_class service=new service_class();
dao_interface dao=new dao_class();
service.setDao(dao);
System.out.println(service.findUser("张三"));
}
}
通过接口编程,方法:
public void setDao(dao_interface dao){
this.dao=dao;
}
使得service_class和dao_class耦合程度大大降低,但是dao_service中的语句:
dao_interface dao=new dao_class();
service.setDao(dao);
使得dao_service_controller(模拟控制器)和dao_class发生了依赖,因此这种方式也没有解决耦合紧密的问题。
例3. 在例2的基础上通过依赖注入的方式解决:
(1)首先在项目中添加spring库,如图(本例基于NetBeans7.0):
(2)新建“Spring XML配置文件”,命名为“mySpringCfg.xml”:
在步骤3中选择context的Spring名称空间:
(3)在mySpringCfg.xml文件中加入下面语句:
<bean id="daoClass" class="dao_class"/>
<bean id="serviceClass" class="service_class">
<property name="dao">
<ref local="daoClass"/>
</property>
</bean>
表示程序中有两个bean:daoClass和serviceClass,分别代表dao_class 类和service_class类,而“serviceClass”通过“接口”参数“dao”和“daoClass”发生依赖。
(4)修改dao_service _controller类:
public class dao_service _controller{
public static void main(String []args) {
ApplicationContext ctx
=new FileSystemXmlApplicationContext("src/mySpringCfg.xml");
service_class service=(service_class)ctx.getBean("serviceClass");
System.out.println(service.findUser("张三"));
}
}
其中语句:
ApplicationContext ctx=new FileSystemXmlApplicationContext("src/mySpringCfg.xml");
表示引入Spring XML配置文件:“mySpringCfg.xml”创建上下文ctx。
语句:
service_class service=(service_class)ctx.getBean("serviceClass");
表示通过上下文ctx创建service_class对象,在创建对象时,通过接口“dao”引用dao_class对象,其关联语句分别为:
service_class类中的语句:
dao_interface dao;
public void setDao(dao_interface dao){
this.dao=dao;
}
注意接口成员的名称;
配置文件mySpringCfg.xml中的语句:
<property name="dao">
<ref local="daoClass"/>
</property>
其余的类和接口均不需要变动。可以看到,service_class类只和接口dao_interface成员dao发生关联,和dao_Class类的依赖是通过配置文件发生的,是在创建对象时“注入”的。
分享到:
相关推荐
JavaEE技术实验九的核心主题是Spring框架的入门与依赖注入,以及结合Hibernate框架进行数据库操作。这个实验旨在帮助开发者理解如何在MyEclipse环境中利用Spring框架来实现服务层(Service Layer)和数据访问对象层...
接着,逐步探索三层架构的实现,从编写DAO、Service到Controller,理解它们之间的协作关系。最后,通过测试用例运行和调试,确保代码的正确性和功能的完整性。 通过这样的学习,你将能够熟练掌握Spring框架的基本...
在`Spring_01_入门篇_依赖注入(控制反转)_XML`中,我们可以看到一个或多个XML配置文件,它们定义了bean的定义,包括bean的类名、属性以及它们之间的依赖关系。例如: ```xml ``` 在这个例子中,`exampleBean`...
- **定义**: Hibernate是一个面向Java语言的对象关系映射(ORM)框架,它提供了从Java类到数据库表的映射以及从SQL查询到Java对象的转换。 - **特点**: - 透明性:开发人员无需关心底层数据库操作细节; - 易用性...
Spring 是一个全面的Java企业级应用开发框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等功能。在Myeclipse中,添加Spring支持类似Struts和Hibernate,通过Add spring in action in action ...
### SSM框架入门到精通知识点详解 #### 一、SSM框架概述 SSM框架是Spring、SpringMVC和MyBatis三个开源框架的组合,是目前Java Web开发中最常用的轻量级框架之一。这三个框架分别负责不同的角色:Spring作为核心...
在业务代码中,我们通过依赖注入或工厂模式获取`UserDAO`实例,并调用其方法: ```java public class UserService { private UserDAO userDAO; public UserService(UserDAO userDAO) { this.userDAO = userDAO;...
- 编写DAO和Service层:实现数据的增删改查操作,利用Spring的依赖注入管理相关对象。 - 创建Struts2 Action:处理HTTP请求,调用Service层方法,返回结果给前端。 - 设计视图:使用EasyUI组件构建管理界面,如表格...
- 依赖注入:Spring通过DI(Dependency Injection)管理组件,使得WebWork的Action可以轻松地注入依赖,如DAO和服务层对象。 - AOP(面向切面编程):Spring的AOP支持允许我们定义拦截器,可以实现事务管理、日志...
在SpringMVC中,依赖注入(DI)和面向切面编程(AOP)是两个重要特性。DI允许我们通过配置或注解来管理对象及其依赖关系,降低组件间的耦合。AOP则提供了在不修改源代码的情况下,对程序进行功能增强的能力,如日志...
- **依赖注入(DI)**:在运行时将Bean的依赖项自动装配到Bean中。 - **注入方式**: - **Set方法注入**:最常用的方式之一,通过setter方法将属性值注入。 - **构造器注入**:在构造器中完成依赖注入。 - **接口...
Spring的核心特性可以促进良好的编程习惯,并通过依赖注入(DI)和面向切面编程(AOP)简化应用程序的开发。依赖注入允许开发者在运行时将对象组合在一起,而不是硬编码它们之间的依赖关系,这提高了代码的可测试性...
5. **项目实例**:提供的项目实例将帮助你将理论知识应用到实践中,通过构建一个完整的应用,你可以学习到如何设计数据库模型,编写DAO层,设置视图解析器,以及处理表单提交和验证等常见Web开发任务。 6. **Spring...
在IT行业中,Spring MVC、Spring和MyBatis是三大核心框架,它们构成了许多企业级Java应用的基础。...对于初学者来说,从入门到项目实战的学习路径是最佳的学习模式,因为它提供了一条从理论到实践的清晰路径。
它提供了强大的请求处理、视图解析和依赖注入功能,使得开发者可以更加专注于业务逻辑,而不是底层的实现细节。 1. **Spring MVC 的核心组件:** - DispatcherServlet:前端控制器,负责接收请求并分发给合适的...
- **业务代理(Business Delegates)和DAO的依赖注入**:通过Spring进行依赖注入,简化代码耦合度。 7. **集成到Struts程序中**: - 在Struts配置文件中配置Spring相关的Bean,以便在Action中调用Spring管理的...
本教程集锦旨在帮助初学者从零开始学习 Ibatis,让你从不会到精通,从喜欢到爱上这个框架。以下是主要的知识点和步骤: 1. **环境准备**: - 安装 Java 开发环境(JDK),确保系统环境变量配置正确。 - 熟悉 ...
- 设计Service层,利用Spring的依赖注入注入DAO层。 - 编写DAO类,利用Hibernate进行数据库操作。 8. **运行和调试**: - 在MyEclipse中运行Web应用,通过浏览器测试Struts2的Action是否正常执行。 - 使用...
- **Create(创建)**: 用户提交表单数据,Struts2 Action接收到请求后,将数据绑定到Java对象,然后通过Spring的依赖注入找到Service层的方法,Service再调用DAO的插入方法,由iBatis执行SQL插入操作。 - **Read...
在Spring入门阶段,首先要理解的是依赖注入(DI)。DI是一种设计模式,它允许我们解耦组件,让它们之间通过接口而非具体的实现进行交互。Spring通过容器管理对象的生命周期和依赖关系,我们只需要配置好bean的定义,...