2017年11月1日 初学者易上手的SSH-spring 01控制反转(IOC)
这章开始学习SSH中最后的一个框架spring。Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
首先就来学习一下IOC,它的好处就是降低了耦合,主要是通过bean之间的依赖关系尽可能地抓换为关联关系。
那么来基于maven项目来配置一个spring吧。
首先可以下载一个spring的插件:可在eclipse->Help->Eclipse Marketplace中搜索spring,然后找到spring tools进行下载即可,其它下载方式就不过多介绍了。
第一步:maven项目中的pom.xml中导入spring的依赖:spring-context,我以4.3.10版本为例
<!-- spring-context 依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3..RELEASE</version>
</dependency>
第二步:在src/main/resources文件夹下建立一个xml,取名为applicationContext.xml。在里面加上spring表头文件,如下
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> </beans> 标签的解释:
xmlns=XML Name space
xmlns: 关于初始化bean的格式文件地址
xmlns:xsi: 辅助初始化bean
xsi:context: 关于spring上下文,包括加载资源文件
xmlns:tx 事务标签的约束
xmlns:aop aop(面向切面)标签的约束
xsi:schemaLocation: 用于声明了目标名称空间的模式文档
第三步:新建一个人的类,给上name,age属性,封装构造,tostring即可。
第四步:开始配置一个bean,来实现IOC。在applicationContext.xml,配置如下:
<bean id="person" class="com.entity.Person"></bean>
//id为这个bean的名称自己定义就好,class为要配置类的全限定路径
//当然也可以使用name属性来代替id属性,name属性可以使用特殊符号来定义名称
第五步:再建立一个类,用main方法或者用junit的@Test来进行测试,测试代码如下
// 延时加载(懒加载) 返回的对象只有一个 单列模式
// 加载文件
BeanFactory factory = new XmlBeanFactory(new
ClassPathResource("applicationContext.xml"));
获取bean对象
Person p = (Person) factory.getBean("person");
System.out.println(p);
// 及时加载 一个bean能够创建多个对象
ApplicationContext aContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取bean对象
Person p = (Person) aContext.getBean("person");
System.out.println(p);
这样一个简单的bean就配置完了。
我们可以在bean后面加上一个属性scope以及init-method属性。
scope属性值:
singleton(默认值)
在每个Spring Ioc容器中一个bean定义对应一个对象实例(单例模式)
prototype
一个bean定义对应多个对象实例.
request
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效.
session
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global session
在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效.
init-method属性的意思是这个bean初始化的时候调用哪个方法,属性值为bean对应这个类中的方法名即可。
接下来看下注入方式:
首先bean标签里面添加property标签,name对应属性名称,value对应属性值
1.比如给这个对象的属性设置默认值
<bean id="person" class="com.entity.Person">
<!--属性设置默认值 -->
<property name="name" value="哈哈"></property>
<property name="age" value=""></property>
</bean>
2.注入一个集合(set,list),以list为例
在persion类中加上一个lsit<string>的属性,封装
注入:
<bean id="person" class="com.entity.Person">
//ls为list<string>的变量名
<property name="ls">
<list>
<value>谷歌</value>
<value>呵呵</value>
<value>嘻嘻</value>
</list>
</property>
</bean>
3.构造注入
//构造注入时,实体类中需存在相应的构造方法
<bean id="person" class="com.entity.Person">
<constructor-arg name="name" value=""></constructor-arg>
<constructor-arg name="age" value=""></constructor-arg>
</bean>
4.注入对象
新建实体类card,给上cid,cname两个属性,封装构造。
在applicationContext.xml中增加一个bean
<bean id="card" class="com.entity.Card" > </bean>
card类中加上persion对象属性,封装。
然后在card的bean中注入
<bean id="card" class="com.entity.Card" >
//name 对象变量名
<property name="person">
//ref对应属性类在bean的标签ID
<ref bean="person" />
//idref元素的功能与<value>类似,只是idref多了验证的功能
<!-- <idref bean="person" /> -->
</property>
</bean>
测试我这里就没试了。除了上面这几种注入,还可以百度看看静态工厂的方法注入以及实例工厂的方法注入。
本章结束!
2017年11月1日 初学者易上手的SSH-spring 01控制反转(IOC)的更多相关文章
- WPS 表格筛选两列相同数据-完美-2017年11月1日更新
应用: 1.选出A列中的数据是否在B列中出现过: 2.筛选出某一批序号在一个表格里面的位置(整批找出) 3.其实还有其他很多应用,难描述出来... ... A列中有几百的名字,本人想帅选出B列中的名字 ...
- 了解ASP.NET Core 依赖注入,看这篇就够了 于2017年11月6日由jesseliu发布
DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET Core的DI实现以及对实例 ...
- Python 爬虫练习(二)爬取补天公益SRC厂商域名URL (2017年11月22日)
介绍下: 补天是国内知名的漏洞响应平台,旨在企业和白帽子共赢. 白帽子在这里提交厂商漏洞,获得库币和荣誉,厂商从这里发布众测.获取漏洞报告和修复建议. 在2017年3月份之前,补天的厂商域名URL是非 ...
- [svc]linux常用手头命令-md版-2017年11月12日 12:31:56
相关代码 curl命令-网站如果3次不是200或301则报警 curl -o /dev/null -s -w "%{http_code}" baidu.com -k/--insec ...
- 2017年11月23日**科技面试java工程师面试总结
从整个面试看了,表现并不理想,有很多不足. 1.关于手机页面闪现问题的处理.从原理上观察,页面闪现是因为异步请求导致的.在进入页面中首先会加载默认的东西,此时也会访问数据库端,会用ajax判断是否满足 ...
- 2017年11月8日最新仿互站导航t5友价商城-9套模板首页都增加微信登陆
今天测试效果如下,直接看图吧,入口在下方,点击图片直达 把9套餐模板都添加了微信首页登陆,仿互站的导航,操作比互站还要方便,官方一直对https 支持不太友好,索性把所有的https bug都修复了, ...
- 2017年11月30日 C#TreeNode递归&邮箱验证&新用户窗体
TreeNode递归 递归:自己调用自己一层一层的把数据找出来 TreeNode:可以创建多个节点 private void button1_Click(object sender, EventArg ...
- 2017年11月28日 C#进程和线程
进程 需要放using System.Diagnostics;才可以用进程 用时的方法名为Process 用两个按钮一个为选择文件夹一个为打开可以打开系统内的进程. 注意:打开时一定要用进程名 Pro ...
- 2017年11月27日 C#MDI窗体创建&记事本打印&记事本查找、自动换行
MDI窗体第一个父窗体 把属性里的IsMdiContainer设置为true就可以了 父窗体连接子窗体 //创建一个新的类,用来连接别的窗体,并且别的窗体为唯一窗体 List<Form> ...
随机推荐
- 【专章】dp基础
知识储备:dp入门. 好了,完成了dp入门,我们可以做一些稍微不是那么裸的题了. ----------------------------------------------------------- ...
- Spring详解(七)------事务管理
PS:本篇博客源码下载链接:http://pan.baidu.com/s/1mi3NhX2 密码:3io2 1.事务介绍 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指 ...
- 【转】FTP主动模式和被动模式的比较
总是记不住FTP主动和被动模式的区别.放在这里,以备日后查阅. FTP是仅基于TCP的服务,不支持UDP.与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口).通常来说这 ...
- Linux-fdisk磁盘分区命令(16)
名称: fdisk 使用: fdisk [块设备磁盘] 说明: 将一个块设备(磁盘)分成若干个块设备(磁盘),并将分区的信息写进分区表. fdisk命令菜单常用参数如下所示: d:(del)删除一个 ...
- 通信技术:SSE设计方案(一)--- 前端Server-Sent Events概念讲解和基础类库完善发布
好了,开篇还是要扯扯的,否则感觉这个技术讲的么有那么冻人,嗯,这个晚上是有点冷了,秋衣秋裤大家都该加起来了,反正我不帮你买,妹子除外,嘻嘻. 之前几篇博客,研究前端通信技术的第一层ajax技术,从最基 ...
- 组件 layui 表单抓取数据四步走
注意事项: layui 中提交按钮是基于"监听"机制实现的. form.on() 的调用需置于 layui.use 的回调函数中. 末尾的 'return false' 不可或缺, ...
- hdu5696 区间的价值
区间的价值 我们定义"区间的价值"为一段区间的最大值*最小值. 一个区间左端点在L,右端点在R,那么该区间的长度为(R-L+1). 现在聪明的杰西想要知道,对于长度为k的区间,最大 ...
- Cocos2d-x Lua游戏开发Mac环境搭建以及一点点感悟
接触Cocos2d-x 最近由于公司项目的需要,自己开始接触Cocos,开始做一些简单的轻量级的游戏,以前没有接触过这一块的东西,也是借助这个机会学习一下游戏的开发,由于以前自己接触的全都是iOS和A ...
- A low-cost wear-leveling algorithm for block-mappingsolid-state disks
[] Li-Pin Chang,Li-Chun Huang.A low-cost wear-leveling algorithm for block-mapping solid-state disks ...
- LINUX 笔记-重定向 :<,<<,>,>>
command>filename 把标准输出重定向到一个新文件中 command>>filename 把标准输出重定向到一个文件中(追加) command 1>filena ...