实验要求:
在Dao层建立CardDao类,编写充值方法(save()),实现充值(在控制台显示充值金额),在Biz层建立CardBiz类,编写充值方法(charge()),调用Dao层中的充值方法(save()),完成充值。充值金额在配置文件中输入(应用test中 输入)。实现过程中不能利用new 操作来完成类的实例化(IoC容器)。

实验分析:

建立CardDao类,在此类下编写方法save(),以实现充值(在控制台显示充值金额);建立StudentCard类,在此类下定义余额,以此记录并获取学生卡里的余额;建立CardBiz类,在此类下编写方法charge(),以实现将方法save()里的充值金额与学生卡里的余额相加,获得充值后的金额。题目要求不能使用new来完成对类的实例化,应采用配置文件进行操作,即本章内容IOC容器(控制反转),其中还会用到DI(依赖注入)。

实验操作所用工具(软件):
IntelliJ IDEA 2021.2.1

实验需要建立三层结构,分别是:Dao层、Biz层、Entity层。

以此建立三层结构。即在工程文件下的src文件夹的main中的Java建立三个包(package)。在resource下编写配置文件。
在工程文件下的src文件夹的test中的Java建立test类。
效果如图:

三个包下面分别建立三个类(class)即CardBiz、CardDao、StudentCard

代码实现:

CardDao类

package com.cqust.dao;

import com.cqust.entity.StudentCard;

public class CardDao {
    public void save(double money){
        System.out.println("您的充值金额为:¥"   money);
    }
}

StudentCard类

package com.cqust.entity;

public class StudentCard {
    double balance;         //定义余额

    public double getBalance() {
        return balance;     //返回余额
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
}

CardBiz类

package com.cqust.biz;

import com.cqust.dao.CardDao;
import com.cqust.entity.StudentCard;

public class CardBiz {
    private StudentCard studentCard;	//定义一个StudentCard对象
    private CardDao cardDao;			//定义一个CardDao对象
    public void setStudentCard(StudentCard studentCard) {
        this.studentCard = studentCard;
    }
    public void setCardDao(CardDao cardDao) {
        this.cardDao = cardDao;
    }
    public void charge(double money){
        cardDao.save(money);        					//调用cardDao里的save方法
        double sum = studentCard.getBalance()   money;	//将学生卡里的余额加上需要充值的金额
        System.out.println("充值成功!当前您的余额为:¥"   sum);	//输出充值后的金额
    }
}

test类(src\test\java\test.java)

import com.cqust.biz.CardBiz;
import com.cqust.entity.StudentCard;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {
    public static void main(String[] args) {
        //获取核心容器(IoC)对象
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取xml文件中的bean
        CardBiz cardBiz= (CardBiz) applicationContext.getBean("cardBiz");
        //获取xml文件中的bean
        StudentCard studentCard= (StudentCard) applicationContext.getBean("studentCard");
        //传一个数值给cardBiz里的charge方法进行充值,此处我给的800,吃好一点哈哈哈
        cardBiz.charge(800);
    }
}

applicationContext.xml(配置文件)

< property >是< bean >元素的子元素,它用于调用Bean实例中的setXXX()方法完成属性赋值,从而实现依赖注入,其name属性表示Bean实例中的相应属性名,ref属性用于表示指定其属性值。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="studentCard" class="com.cqust.entity.StudentCard">
        <property name="balance" value="88.88"></property>      <!--将学生卡的余额设置为88.8元-->
    </bean>
    <bean id="cardDao" class="com.cqust.dao.CardDao"></bean>
    <bean id="cardBiz" class="com.cqust.biz.CardBiz">
        <property name="studentCard"  ref="studentCard"></property>
        <property name="cardDao" ref="cardDao"></property>
    </bean>
</beans>

程序运行结果:

实验总结:
  本次实验主要运用了Spring的控制反转(IOC)和依赖注入(DI)等知识,通过利用Spring框架编写Java程序,实现学生卡的单次充值。如需对学生卡进行多次充值,可将部分代码修改即可实现。
  在传统Java开发下,调用者会采用“new 被调用者”的代码方式来创建被调用者这个需要使用的对象。而使用Spring框架,被调用者只需要让spring容器来创建。从spring的角度来看,仅仅是进行了依赖注入(DI);从项目的角度来看,控制权从应用代码转移到了spring容器,发生了控制反转(IOC),所以说依赖注入和控制反转只是从两个角度描述了同一个概念。IOC的概念更广,使用了DI的程序一定使用了IOC,但是使用了IOC的程序不一定使用了DI。
IoC(控制反转)
  首先想说说IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。
  那么IoC是如何做的呢?Spring所倡导的开发方式就是,所有的类都会在spring容器中登记,告诉spring你是个什么,你需要什么,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
DI(依赖注入)
  IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象H需要操作数据库,以前我们总是要在H中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,H中需要一个Connection,至于这个Connection怎么构造,何时构造,H不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注入到H当中,这样就完成了对各个对象之间关系的控制。H需要依赖 Connection才能正常运行,而这个Connection是由spring注入到H中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
  理解了IoC和DI的概念后,一切都将变得简单明了,剩下的工作就是在spring的框架中堆积木啦。
  对于Spring IoC这个核心概念,我相信每一个学习Spring的人都会有自己的理解。这种概念上的理解没有绝对的标准答案,仁者见仁智者见智。如果有理解不到位或者理解错的地方,欢迎广大园友指正!

到此这篇关于利用Spring框架为自己的校园卡充值的文章就介绍到这了,更多相关Spring框架校园卡充值内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

利用Spring框架为自己的校园卡充值(推荐)的更多相关文章

  1. Android实现NFC读取校园卡

    这篇文章主要为大家详细介绍了Android实现NFC读取校园卡,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. 利用Spring框架为自己的校园卡充值(推荐)

    这篇文章主要介绍了利用Spring框架为自己的校园卡充值,本次实验主要运用了Spring的控制反转(IOC)和依赖注入(DI)等知识,通过利用Spring框架编写Java程序,实现学生卡的单次充值,如需对学生卡进行多次充值,可将部分代码修改即可实现,需要的朋友可以参考下

  3. 使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能

    这篇文章主要介绍了使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能,非常具有实用价值,需要的朋友可以参考下。

  4. ajax – 将spring 3 mvc与GWT集成的经验?

    鉴于:Spring3.0mvc具有优秀的REST支持,其中一个表示形式是JSON。>默认GWT的MVP体系结构只适用于客户端,并且可以很好地与JSON一起工作吗?谢谢可以分享使用Spring3.0mvc与GWT的经验吗?我们已经在GWT和SpringMVC成功构建了一个全面的大型应用程序。Spring是项目成功的关键。只有在Spring中,我们才能在服务器端单独测试一些应用程序。忽略GWT使用的默认Servlet,并创建自己的Spring控制器来处理传入的GWT-RPC请求。如果您遵循指南,GWT的MVP

  5. ajax 跨域 session 及 spring boot分布式session

    很遗憾,我手工创建的不生效,因为tomcat在绑定session时,采取严格匹配更加优先的原则,blog.vinceruan.info比.vinceruan.info更加匹配。这个和单独项目时,把userId放到session中道理是一样的。因为多个子项目在不同的tomcat,无法实现session共享,这时我们可以利用cookie。多说几句关于cookie和session的区别:cookie是针对于浏览器的,session是针对服务器的。cookie的产生会有JSessionId,也就是session的

  6. dwr框架与Spring整合

    接下来说一些关于dwr与Spring整合的相关配置1.首先得有一个DWR架包可以在官网下载最新dwr架包2.我们需要在WEB-INF下创建一个dwr.xml的配置文件其中name="beanName"是默认的不用修改,value="aclService"就是页面调用后台service的名字,也就是Spring配置文件中对应的bean。javascript是在页面上对应的名称create的方式为Spring3.我们需要在web.xml里面添加配置4.我们需要在beans里面添加相应的5.页面上需要导入相关j

  7. dwr与spring整合

    DWR是一个用于改善web页面与java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。

  8. DWR配置文件详解

    dwr.xml是DWR的配置文件。默认情况下DWR1.1有8种创造器。当前的DWR不支持ULR重写。你不需要在dwr.xml文件中添加这段话,它已经存在于DWR的内部dwr.xml文件中了。用new创造器有一些好处:安全:DWR创造的对象生存的事件越短,多次调用中间的值不一致的错误机会越少。对于上诉两种情况,你仍然需要class参数,用来告诉DWR它是在操作的对象类型是什么。Spring创造器已经有了变化,所以你最好检查一下DWR的最新版本。确认你的Spring的Bean在DWR外面运行良好。配置DWR和

  9. DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO

    DWR的基本原理以及前后台互相调用并整合SPRING的简易DEMO博客分类:WEB技术dwr工作也已经有几年了,最近突然心血来潮,想写点技术博客,记录在工作和学习中碰到的一些问题,一方面方便自己以后查看,一方面也可以帮助下碰到同类问题的朋友们。这个DEMO只需要DWR和SPRING2个jar包,如需要可以在附件中下载。在实际项目发布后将其设置为false,以避免用户进入此页面。

  10. DWR之dwr.xml配置详解

    [/size][size=medium][size=large][/size][align=center][/align]本人对dwr中文文档关于dwr.xml做的一个整理,纯粹体力活,有用得着的朋友别忘顶一下,留个联系方式一起交流学习!dwr.xml是DWR的配置文件。默认情况下,应该把它放到WEB-INF目录下创建dwr.xml文件dwr.xml文件的结构如下:

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部