搭建SSM框架之Spring

  作为一枚大四准备毕业的学生,最重要的事便是毕业设计,前些日子刚刚拿到毕设题目:“3D网络图:面向网络结构数据的可视化软件设计”,(⊙o⊙)…,怎么说哪,看到题目就是一头雾水(前几届不都是学生选课系统,学生教务管理系统吗-_-||,说好的套路那),望着题目,看看在公司里要学的PeopleSoft,我去,毫无关系好吗。在学校学了两年JAVA,校外实习交了一万多学习了JavaEE,找个工作去干了PeopleSoft-_-||,毕设又是可视化设计,唉,真是世事多变,人生无常啊。

  好了,吐槽归吐槽,为了吃饭,为了毕业什么都得慢慢来。仔细了解了一下题目:“本题目要求学生使用webGL技术开发一个用于数据可视化呈现的web应用软件。网络结构数据的可视化表现方式一直是数据可视化领域研究的重点。采用webGL技术,可以使用现代浏览器直接在网页上呈现3D效果,为网络结构数据可视化和交互设计提供了新的可能。”突然想起在学校的日子里对那些网页上呈现3D效果代码的着迷(也就在那时学了JS,甚至决定了以后校外实习的选择),回想起那时的时光,看看现在做的PeopleSoft,理想和现实的差距还真是大o(╥﹏╥)o,大概熟悉了一下题目后和老师聊了聊,原来这次毕设和我的理想是那么的接近,那就开始做,而且要好好做,人不止是为了现实而活着,至少要向自己的理想迈出几步。

  首先老师让先搭起一套框架,说实话不管是实习还是在大学,框架都没有深入理解过(实习时刚学到JS,就找到工作,也没想到会做PeopleSoft),那就从头开始,慢慢来吧!

  翻开好久不动的JAVA资料,打开好久没看的JAVA视频,学着学着突然有种想哭的冲动(不要问我为什么,就是很难过),以下便是我学习Spring的过程,以后会一直更新,直到把毕设做完。

  首先我了解到Spring是一个社区,也是一个很大的项目,其中包含了很多子项目,我主要用到的是其中的核心项目Spring Framework。

  Spring-framework 框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块。这些模块分为Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation和测试部分,其中我主要去学习的是Core Container和AOP。

  

 一、 其中Spring中有两个重要的概念:

IOC:Inversion of Control 控制反转
spring核心容器也可以称为IOC容器,该容器主要负责管理各种对象的声明周期(对象的创建、初始化、销毁等)
IOC容器并没有实现更多的功能,但它的存在使我们不需要很多代码、不需要考虑对象间复杂的耦合关系就能从IOC容器中获取合适的对象,而且提供了各种对象的可靠的管理,极大地降低了开发的复杂性。

总结:
1.IOC意味着将你设计好的类交给了spring容器去控制,而不是在类的内部自己进行控制。
2.有IOC容器之后,剩下的工作只是在IOC容器中堆积木
3.之前项目中对象和对象之间的关系是直接写死在代码中的,而使用了IOC容器后则是在代码中并没有写对象和对象是什么关系,而是把这种关系的建立交给了IOC容器去做,并且是在代码运行的时候动态建立起来(我们可以通过配置文件进行任意改变)
4.IOC其实就是一种将调用者与被调用者分离的思想。

DI:Dependency Injection 依赖注入
DI的概念的提出是用来代替IOC的,表示让调用类对某一接口实现类的依赖关系由容器注入,以移除调用类对某一接口实现类的依赖。(思考servlet和service层接口以及service层接口实现类这三者的关系)
依赖注入 这个名词显然比 控制反转 更直接明了,并且易于理解。

 

二、对此有了了解后,下载Spring:

http://repo.springsource.org/libs-release-local/org/springframework/spring/3.2.4.RELEASE/spring-framework-3.2.4.RELEASE-dist.zip
直接粘到地址栏或者下载工具里,每次有更新只要改版本号就可以。

 

三、然后就是Spring的配置流程及需要理解的内容:

Spring IOC容器核心api(容器将来会是一个对象)
BeanFactory接口
BeanFactory是Spring中IOC容器的核心接口,主要用于处理Bean的初始化和配置,建立对象间的依赖关系

接口中主要方法如下:
//根据指定名称返回一个Bean实例
Object getBean(String name)

//判断名称为name的Bean是否是原型,即是否总是返回一个新实例(非单例)
boolean isPrototype(String name)

//判断名称为name的Bean是否是单例
boolean isSingleton(String name)

//判断容器中是否包含给定名称的Bean实例
boolean containsBean(String name)

//如果名称为name的Bean有别名则返回所以别名
String[] getAliases(String name)

ApplicationContext接口
该接口继承于BeanFactory,增强了BeanFactory,增加了事务处理AOP,国际化,事件传递等功能

所以在代码中我们一般会使用ApplicationContext接口,以及这个接口相应的实现类来创建spring的容器对象
例如:
String path = "com/briup/ioc/set/set.xml";
ApplicationContext container =
new ClassPathXmlApplicationContext(path);

Student s = (Student)container.getBean("student");

 

 四、配置文件
Spring通过读取配置文件中的数据来对项目各个对象进行实例化,配置以及组装,通常使用XML文件来作为配置文件

XML基本结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">

</beans>

注意事项:
1.这个文件的头部声明可以在下载的spring文档中的示例找到
2.这里面用到了俩个schema文件(.xsd文件),分别是spring-beans-3.2.xsd和spring-context-3.2.xsd,它们也可以在下载的spring文档中找到
3.在Eclipse中把xml文件和schema文件关联后,xml中就可以有标签代码的提示了(注意关联时别配置错了)
4.spring框架是模块化的,之后使用其他模块的时候,还可以在该xml的根元素中继续引用其他模块中相应的schema文件,然后就可以使用引入新模块中的标签代码了

 

测试例子:

set方式注入(必须依靠set方法):

导入jar包:

创建两个测试类,例如Student和Teacher,其中Teacher类中包含Student。

编写XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd"><bean name="stu" class="com.briup.bean.Student"><property name="id" value="1"></property><property name="name" value="tom"></property><property name="age" value="20"></property></bean><bean name="teacher" class="com.briup.bean.Teacher"><property name="id" value="1"></property><property name="name" value="zhangsan"></property><property name="student" ref="stu"></property></bean>

  写测试方法:

public void ioc_set() {try {String[] path = {"com/briup/ioc/set/set.xml"};ApplicationContext container = new ClassPathXmlApplicationContext(path);Teacher t = (Teacher)container.getBean("teacher");System.out.println(t);System.out.println(t.getId());System.out.println(t.getName());System.out.println(t.getStudent());System.out.println("-------------");System.out.println(t.getStudent().getId());System.out.println(t.getStudent().getName());System.out.println(t.getStudent().getAge());} catch (Exception e) {e.printStackTrace();}}

  这就是一个Spring实现控制反转,依赖注入的例子。

  总结(Spring):

1.降低耦合性(在一个类中运行时引入其他类,而不是直接new对象)
2.去除一些方法中重复代码(例如日志文件,权限控制,事务处理(开事务,提交事务,异常事务处理) //需要这个代码,但这个代码又不能直接写到这里)
spring可以在运行期间把代码进行动态结合
3.管理对象的生命周期
4.spring核心容器中放入对象,这些对象被称为bean(可重复使用的组件)
5.IOC:反转,主动变被动
DI:依赖(依赖的解释:例如web层依赖service层,service层依赖dao层)注入,DI的概念的提出是用来代替IOC的

转载于:https://www.cnblogs.com/wsyblog/p/8157488.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

audio unity 加速_浅谈Unity中Android、iOS音频延迟

在Unity上面做音游&#xff0c;当在移动端实机运行起来&#xff0c;会发现&#xff0c;音频的发出会有一定的延迟&#xff0c;无论是长音效还是短音效&#xff0c;Unity内置的Audio内部使用的是FMOD&#xff0c;有以下手段改善通过设置稍微改善其延迟的问题Edit → Project Set…

深度学习之 hard negative mining (难例挖掘)

Hard Negative Mining Method 思想 hard是困难样本&#xff0c;negative是负样本&#xff0c;hard negative就是说在对负样本分类时候&#xff0c;loss比较大&#xff08;label与prediction相差较大&#xff09;的那些样本&#xff0c;也可以说是容易将负样本看成正样本的那些…

单列表_使用Excel中的quot;记录单quot;功能快速录入数据

在Excel中进行数据录入的时候&#xff0c;平常都是一行一行地录入数据&#xff0c;但是有时候在单元格之间&#xff0c;行与行&#xff0c;列与列之间频繁地切换去录入数据&#xff0c;费事费力还容易出错。今天给你推荐一个既好用又有效率的Excel中的隐藏功能——“记录单”。…

CentOS 6.9下的Setup工具(用于管理服务/防火墙/网络配置/验证服务)

说明&#xff1a;Setup工具套件好像是CentOS下特有的用于管理服务/防火墙/网络配置等&#xff0c;其实就是基于命令行模式界面的GUI工具。唯一特点就是方便。 安装&#xff1a; #安装Setup命令工具 yum -y install setuptool #安装Setup工具配套的系统服务组件 yum -y insta…

wireshark解析rtp协议,流媒体中的AMR/H263/H264包的方法

原文教程&#xff1a;http://hi.baidu.com/zjxiaoyu3/blog/item/22f9f18f32b45de5f11f3670.html 抓到完整的流媒体包之后&#xff0c;用wireshark打开&#xff0c;其中的包可能不会自动映射成RTP&#xff0b;AMR&#xff0f;H263&#xff0f;H264的包&#xff0c;做如下修改操作…

深度学习之非极大值抑制(Non-maximum suppression,NMS)

非极大值抑制&#xff08;Non-maximum suppression&#xff0c;NMS&#xff09;是一种去除非极大值的算法&#xff0c;常用于计算机视觉中的边缘检测、物体识别等。 算法流程 给出一张图片和上面许多物体检测的候选框&#xff08;即每个框可能都代表某种物体&#xff09;&…

148. 颜色分类

给定一个包含红&#xff0c;白&#xff0c;蓝且长度为 n 的数组&#xff0c;将数组元素进行分类使相同颜色的元素相邻&#xff0c;并按照红、白、蓝的顺序进行排序。 我们可以使用整数 0&#xff0c;1 和 2 分别代表红&#xff0c;白&#xff0c;蓝。 注意事项 不能使用代码库中…

vue项目token放在哪里_关于vue动态菜单的那点事

vue-element-admin4.0国内节点访问地址&#xff1a;https://panjiachen.gitee.io/vue-element-admin-site/zh/本此使用的是https://github.com/PanJiaChen/vue-element-admin/tree/i18n 国际化分支的版本。说是除了国际化其他都一样。本文主要介绍前台动态的使用资源权限。后台…

H264学习方法历程资料

我的H.264学习历程 半年前&#xff0c;我知道了H.264这个名词。那个时候决定学习H.264&#xff0c;可是我连资料都不知道如何收集。而且整个学校就只有我一个人在学习H.264&#xff0c; 找不到人交流&#xff0c;所以那个时候学得真的是举步维艰&#xff0c;很痛苦&#xff0c…

深度学习之 ROI Pooling

什么是ROI&#xff1f; ROI是 Region of interest 的简写&#xff0c;指的是 Faster R-CNN 结构中&#xff0c;经过 RPN 层后&#xff0c;产生的 proposal 对应的 box 框。 ROI Pooling 顾名思义&#xff0c;是 pooling 层的一种&#xff0c;而且是针对 ROIs 的 pooling。整个…

KD树小结

很久之前我就想过怎么快速在二维平面上查找一个区域的信息&#xff0c;思考许久无果&#xff0c;只能想到几种优秀一点的暴力。 KD树就是干上面那件事的。 别的不多说&#xff0c;赶紧把自己的理解写下来&#xff0c;免得凉了。 KD树的组成 以维护k维空间(x,y,……)内的KD树为例…

多元函数求极值中的a_多元函数的条件极值和拉格朗日乘数法

、条件极值、拉格朗日乘数法1. 转化为无条件极值在讨论多元函数极值问题时&#xff0c;如果遇到除了在定义域中寻求驻点(可能的极值点)外&#xff0c;对自变量再无别的限制条件&#xff0c;我们称这类问题为函数的无条件极值。如求的极值&#xff0c;就是无条件极值问题。然而在…

深度学习之 RPN(RegionProposal Network)- 区域候选网络

anchor boxes基本概念与作用: feature map 上的一个点可以映射回输入图片上的一个点&#xff0c;以特征图上这个点为中心&#xff0c;预先人为设定 k 个 boxes&#xff0c;这些 boxes 就称为在这个点上生成的 k 个 anchor boxes&#xff08;所有anchor boxes的中心点坐标是一样…

h264的码率控制 JVT-G012

开始看h264的码率控制&#xff0c;很多地方都提到 G012&#xff0c;拿来做为参考比较&#xff0c;看来很有必要研究清楚。 偶这人&#xff0c;E文文档不翻译的话&#xff0c;看过就忘了&#xff0c;于是草草翻译了下&#xff0c;因为不打算做B帧&#xff0c;也不准备在同一帧中…

Android RecyclerView嵌套EditView实时更新Item数据

一、场景&#xff08;例如&#xff1a;购物车&#xff09; 1、当我们需要以列表样式管理某些数据时&#xff0c;可能需要列表项的某个字段可编辑 2、编辑Item上的某个字段后可能还要更新相关字段的值 二、可能遇到的问题 1、列表滑动导致输入框中的数据错位&#xff08;或者焦点…

workbench拓扑优化教程_优化技术在水泵水力设计的应用(上篇)

文章来源&#xff1a;安世亚太官方订阅号&#xff08;搜索&#xff1a;Peraglobal&#xff09;CFD技术在泵的内流数值模拟、研究泵内部流动规律和结构方面已广泛应用&#xff0c;取得了很多成果。但是初步设计的产品如果通过CFD仿真得到的性能曲线不能满足使用要求&#xff0c;…

深度学习之 TensorRT

1 简介 TensorRT是一个高性能的深度学习推理&#xff08;Inference&#xff09;优化器&#xff0c;可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxne…

H.264笔记

H.264标准写得比较繁复&#xff0c;所以考虑在浏览完Whitepaper之后就开始研读X264代码。X264代码风格还是比较清晰简洁的。根据对标准得理解&#xff0c;Picture Order Count在Slice解码的一开始就被提及&#xff1a;I0 B1 B2 P3 B4 B5 P6I0 P3 B1 B2 P6 B4 B5于是I0的POC是0&…

进制转换中dbho是什么意思_什么是网段?二进制十进制如何互相转换?看完这篇,你就全明白了...

之前的文章讲了ip&#xff0c;子网掩码&#xff0c;网关的关系&#xff0c;今天着重讲一下网段。我们用傻瓜交换机通讯时&#xff0c;一个网段的设备才能互相通讯&#xff0c;怎么能判断两个ip是同一个网段呢&#xff1f;今天就简单的说一下。(这篇文章用语音听可以起到催眠作用…

【网络流24题】星际转移问题(最大流)

【网络流24题】星际转移问题&#xff08;最大流&#xff09; 题面 Cogs 题解 因为天数是未知的&#xff0c;所以我们要想办法处理天数 可以选择二分或者依次累加天数 因为数据范围较小&#xff0c;使用二分可能反而复杂度会增高 所以使用不断累加天数 那么&#xff0c;把所有的…