这章开始学习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)的更多相关文章

  1. WPS 表格筛选两列相同数据-完美-2017年11月1日更新

    应用: 1.选出A列中的数据是否在B列中出现过: 2.筛选出某一批序号在一个表格里面的位置(整批找出) 3.其实还有其他很多应用,难描述出来... ... A列中有几百的名字,本人想帅选出B列中的名字 ...

  2. 了解ASP.NET Core 依赖注入,看这篇就够了 于2017年11月6日由jesseliu发布

    DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET  Core的DI实现以及对实例 ...

  3. Python 爬虫练习(二)爬取补天公益SRC厂商域名URL (2017年11月22日)

    介绍下: 补天是国内知名的漏洞响应平台,旨在企业和白帽子共赢. 白帽子在这里提交厂商漏洞,获得库币和荣誉,厂商从这里发布众测.获取漏洞报告和修复建议. 在2017年3月份之前,补天的厂商域名URL是非 ...

  4. [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 ...

  5. 2017年11月23日**科技面试java工程师面试总结

    从整个面试看了,表现并不理想,有很多不足. 1.关于手机页面闪现问题的处理.从原理上观察,页面闪现是因为异步请求导致的.在进入页面中首先会加载默认的东西,此时也会访问数据库端,会用ajax判断是否满足 ...

  6. 2017年11月8日最新仿互站导航t5友价商城-9套模板首页都增加微信登陆

    今天测试效果如下,直接看图吧,入口在下方,点击图片直达 把9套餐模板都添加了微信首页登陆,仿互站的导航,操作比互站还要方便,官方一直对https 支持不太友好,索性把所有的https bug都修复了, ...

  7. 2017年11月30日 C#TreeNode递归&邮箱验证&新用户窗体

    TreeNode递归 递归:自己调用自己一层一层的把数据找出来 TreeNode:可以创建多个节点 private void button1_Click(object sender, EventArg ...

  8. 2017年11月28日 C#进程和线程

    进程 需要放using System.Diagnostics;才可以用进程 用时的方法名为Process 用两个按钮一个为选择文件夹一个为打开可以打开系统内的进程. 注意:打开时一定要用进程名 Pro ...

  9. 2017年11月27日 C#MDI窗体创建&记事本打印&记事本查找、自动换行

    MDI窗体第一个父窗体 把属性里的IsMdiContainer设置为true就可以了 父窗体连接子窗体 //创建一个新的类,用来连接别的窗体,并且别的窗体为唯一窗体 List<Form> ...

随机推荐

  1. uva11806

    [题意] n行m列网格放k个石子.有多少种方法?要求第一行,第一列,最后一行,最后一列必须有石子. [题解] 利用容斥原理.可以转到求"第一行.第一列.最后一行.最后一列没有石子" ...

  2. java中log4j学习笔记

    Log4j是apache的一个开源项目,用来操作程序日志信息的框架.因便于管理,在工程中用来代替System.out打印语句.通过配置Log4j中的log4j.properties,可以指定日志信息的 ...

  3. Python一维数据分析

    1.Numpy数组 numpy的数组只能存放同一种数据类型,使用的方式和Python列表类似 1.1 声明: import numpy as np countries = np.array([ 'Af ...

  4. FPGA与数字信号处理

    过去十几年,通信与多媒体技术的快速发展极大地扩展了数字信号处理(DSP)的应用范围.眼下正在发生的是,以更高的速度和更低的成本实现越来越复杂的算法,这是针对高级信息服更高带宽以及增强的多媒体处理能力等 ...

  5. python检查IP地址正确性

    一.自动动手,丰衣足食 #encoding=utf-8 import os,sys def check_ip(ipaddr): addr = ipaddr.strip().split('.') #切割 ...

  6. 学习总结---OSPF协议

    总结: 1.ospf协议报文不会泛洪扩散,而是逐级路由器处理后,再从所有ospf启用端口发送出去,也就是说,只能从邻居接收到ospf报文,报文的源ip是邻居的ip地址,目的ip是组播ip. 2.开启o ...

  7. MyBatis开发中解决返回字段不全的问题

    场景重现: mybatis 在查询的时候,可以返回Map,但是一旦这个字段为空(null)的时候,map里就没有了.我用的是mysql数据库,除了在查询语句上做ifnull判断给它默认值外,有没的别的 ...

  8. Ubuntu安装Java8和Java9

    前言 系统:Ubuntu 16.04 软件: Java8, Java9 Tips: Java 9 的代码由于提供了新特性,所以有些代码并不支持向后兼容.也就是说,用 Java 9 写的代码,有可能在 ...

  9. sublime Text 正则替换

    我遇到一个文章,需要把所有的 (数字) 换为 [数字] 于是我使用 Sublime Text的替换 首先,我们需要打开正则使用"Alt+R" 或打开"Ctrl+h&quo ...

  10. win10 uwp 从StorageFile获取文件大小

    本文主要:获取文件大小 private async Task<ulong> FileSize(Windows.Storage.StorageFile file) { var size = ...