`

依赖注入入门-从dao到service

阅读更多

在分层的web应用系统中,通常将数据操作分为dao数据层和service业务逻辑层,dao层负责对数据的操作servletaction通过service层对数据进行读写,而service层对数据的读写依赖于dao 层对数据的操作,因此存在着类之间的依赖。下面我们通过模拟实验理解不同技术对依赖关系的处理。

1.在传统的模式中,依赖关系是通过构造对象的方式实现的。

创建如下三个类,模拟从daoservice的功能实现:

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_classdao_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_classdao_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中选择contextSpring名称空间:

 



 

 

3)在mySpringCfg.xml文件中加入下面语句:

<bean id="daoClass" class="dao_class"/>

    <bean id="serviceClass" class="service_class">

        <property name="dao">

            <ref local="daoClass"/>

         </property>

</bean>

 

表示程序中有两个beandaoClassserviceClass,分别代表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类的依赖是通过配置文件发生的,是在创建对象时“注入”的。

1
2
分享到:
评论

相关推荐

    JavaEE技术-试验九.zip_Spring入门_依赖注入

    JavaEE技术实验九的核心主题是Spring框架的入门与依赖注入,以及结合Hibernate框架进行数据库操作。这个实验旨在帮助开发者理解如何在MyEclipse环境中利用Spring框架来实现服务层(Service Layer)和数据访问对象层...

    Spring_01_入门篇_依赖注入(控制反转)_ANN

    接着,逐步探索三层架构的实现,从编写DAO、Service到Controller,理解它们之间的协作关系。最后,通过测试用例运行和调试,确保代码的正确性和功能的完整性。 通过这样的学习,你将能够熟练掌握Spring框架的基本...

    Spring_01_入门篇_依赖注入(控制反转)_XML

    在`Spring_01_入门篇_依赖注入(控制反转)_XML`中,我们可以看到一个或多个XML配置文件,它们定义了bean的定义,包括bean的类名、属性以及它们之间的依赖关系。例如: ```xml ``` 在这个例子中,`exampleBean`...

    struts2.0 spring2.0 hibernate3.0整合开发快速入门-3

    - **定义**: Hibernate是一个面向Java语言的对象关系映射(ORM)框架,它提供了从Java类到数据库表的映射以及从SQL查询到Java对象的转换。 - **特点**: - 透明性:开发人员无需关心底层数据库操作细节; - 易用性...

    Myeclipse开发struts+hibernate+spring新手入门--环境配置---项目开发示例

    Spring 是一个全面的Java企业级应用开发框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等功能。在Myeclipse中,添加Spring支持类似Struts和Hibernate,通过Add spring in action in action ...

    ssm 入门到精通.txt

    ### SSM框架入门到精通知识点详解 #### 一、SSM框架概述 SSM框架是Spring、SpringMVC和MyBatis三个开源框架的组合,是目前Java Web开发中最常用的轻量级框架之一。这三个框架分别负责不同的角色:Spring作为核心...

    DAO入门的实用例子

    在业务代码中,我们通过依赖注入或工厂模式获取`UserDAO`实例,并调用其方法: ```java public class UserService { private UserDAO userDAO; public UserService(UserDAO userDAO) { this.userDAO = userDAO;...

    学生信息管理系统(SSH+EasyUI)---入门项目

    - 编写DAO和Service层:实现数据的增删改查操作,利用Spring的依赖注入管理相关对象。 - 创建Struts2 Action:处理HTTP请求,调用Service层方法,返回结果给前端。 - 设计视图:使用EasyUI组件构建管理界面,如表格...

    webwork增删改简单入门例子(+spring+ibatis)

    - 依赖注入:Spring通过DI(Dependency Injection)管理组件,使得WebWork的Action可以轻松地注入依赖,如DAO和服务层对象。 - AOP(面向切面编程):Spring的AOP支持允许我们定义拦截器,可以实现事务管理、日志...

    SpringMVC+MyBatis开发从入门到实践源码

    在SpringMVC中,依赖注入(DI)和面向切面编程(AOP)是两个重要特性。DI允许我们通过配置或注解来管理对象及其依赖关系,降低组件间的耦合。AOP则提供了在不修改源代码的情况下,对程序进行功能增强的能力,如日志...

    spring笔记

    - **依赖注入(DI)**:在运行时将Bean的依赖项自动装配到Bean中。 - **注入方式**: - **Set方法注入**:最常用的方式之一,通过setter方法将属性值注入。 - **构造器注入**:在构造器中完成依赖注入。 - **接口...

    spring、springMVC和mybatis整合入门项目

    Spring的核心特性可以促进良好的编程习惯,并通过依赖注入(DI)和面向切面编程(AOP)简化应用程序的开发。依赖注入允许开发者在运行时将对象组合在一起,而不是硬编码它们之间的依赖关系,这提高了代码的可测试性...

    spring3.0mvc自学教程ppt+注解教程+注解实例+springmybatis教程+项目实例+中文api (老师的心血)从入门到项目实战

    5. **项目实例**:提供的项目实例将帮助你将理论知识应用到实践中,通过构建一个完整的应用,你可以学习到如何设计数据库模型,编写DAO层,设置视图解析器,以及处理表单提交和验证等常见Web开发任务。 6. **Spring...

    Spring mvc、 Spring、 Mybatis、 注解实例、 项目实例 从入门到项目实战

    在IT行业中,Spring MVC、Spring和MyBatis是三大核心框架,它们构成了许多企业级Java应用的基础。...对于初学者来说,从入门到项目实战的学习路径是最佳的学习模式,因为它提供了一条从理论到实践的清晰路径。

    spring mvc+hibernate 简单 实例 代码,新手入门

    它提供了强大的请求处理、视图解析和依赖注入功能,使得开发者可以更加专注于业务逻辑,而不是底层的实现细节。 1. **Spring MVC 的核心组件:** - DispatcherServlet:前端控制器,负责接收请求并分发给合适的...

    Spring-quick-study

    - **业务代理(Business Delegates)和DAO的依赖注入**:通过Spring进行依赖注入,简化代码耦合度。 7. **集成到Struts程序中**: - 在Struts配置文件中配置Spring相关的Bean,以便在Action中调用Spring管理的...

    入门完整ibatis教程集锦

    本教程集锦旨在帮助初学者从零开始学习 Ibatis,让你从不会到精通,从喜欢到爱上这个框架。以下是主要的知识点和步骤: 1. **环境准备**: - 安装 Java 开发环境(JDK),确保系统环境变量配置正确。 - 熟悉 ...

    MyEclipse8.5下SSH2开发环境搭建--图解.rar

    - 设计Service层,利用Spring的依赖注入注入DAO层。 - 编写DAO类,利用Hibernate进行数据库操作。 8. **运行和调试**: - 在MyEclipse中运行Web应用,通过浏览器测试Struts2的Action是否正常执行。 - 使用...

    struts2+spring+ibatis 项目 入门使用

    - **Create(创建)**: 用户提交表单数据,Struts2 Action接收到请求后,将数据绑定到Java对象,然后通过Spring的依赖注入找到Service层的方法,Service再调用DAO的插入方法,由iBatis执行SQL插入操作。 - **Read...

    spring菜鸟入门经典实例

    在Spring入门阶段,首先要理解的是依赖注入(DI)。DI是一种设计模式,它允许我们解耦组件,让它们之间通过接口而非具体的实现进行交互。Spring通过容器管理对象的生命周期和依赖关系,我们只需要配置好bean的定义,...

Global site tag (gtag.js) - Google Analytics