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> ...
随机推荐
- Deep learning:一(基础知识_1)
本文纯转载: 主要是想系统的跟tornadomeet的顺序走一遍deeplearning; 前言: 最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程 ...
- JS或jQuery实现一组复选框的全选和取消全选?
//1.JS方式实现:checkbox 全选/取消全选 var isCheckAll = false; function swapCheck() { if (isCheckAll) { ...
- C#获取本周第一天和最后一天
DateTime nowTime = DateTime.Now; #region 获取本周第一天 //星期一为第一天 int weeknow = Convert.ToInt32(nowTime.Day ...
- js根据时间戳倒计时
今天有个需求,要在页面上做当前时间距离下个月1号的倒计时.在网上找了很多案例也试了很多,大部分都是获取本地当前时间,然后设置结束时间进行计算,然后倒计时.但是有几个问题: 1.如果本地时间和服务器时间 ...
- IDL 结构体
1.创建结构体 (1) 命名结构体 创建具有两个成员变量A.B的命名为str1的结构体 IDL> struct1={str1,a:1,b:2} IDL> help,struct1,/str ...
- (转)TabIndex 属性
html中的tabIndex属性可以设置键盘中的TAB键在控件中的移动顺序,即焦点的顺序. 把控件的tabIndex属性设成1到32767的一个值,就可以把这个控件加入到TAB键的序列中. 这 ...
- WPF Popup全屏 弹出方法。解决只显示75%的问题。
WPF Popup全屏 弹出方法.解决只显示75%的问题. WPF 中 Popup 有一个特点.当Popup的高度超过屏幕的75%的时候,只显示75%的高度. 如下代码: <Window x ...
- 干了这杯Java之LinkedList
LinkedList和ArrayList一样实现了List接口 ArrayList内部为数组 LinkedList内外为双向链表 实现了Deque接口,双端列队的实现 图片来自Wiki 内部实现为No ...
- oracle开启一个用户
我的工具,PL/SQL Developer(其他工具大同小意) 1.用系统管理员账号登入数据库 账号是:sys, connect as:sysdba 登入进入如下页面. 2.查看所有用户( ...
- 浅谈script标签中的async和defer
script标签用于加载脚本与执行脚本,在前端开发中可以说是非常重要的标签了.直接使用script脚本的话,html会按照顺序来加载并执行脚本,在脚本加载&执行的过程中,会阻塞后续的DOM渲染 ...