Spring笔记(二)Core层
Spring用一种非入侵的方式来管理程序,模块结构图如下:

.Core层
IOC(控制反转):应用本身程序不负责依赖对象的创建及维护,依赖对象的创建及维护有外设容器负责,即:IOC;
DI(依赖注入):程序运行期间,外部容器动态的将依赖对象注入到另外的对象中,DI中强调的是注入方式;
与Core应用相关的jar包:commons-logging.jar、spring-beans.jar 、 spring-context.jar 、 spring-core.jar,其中commons-logging.jar是为了打印日志;
.启动IOC容器
1、AppliactionContext ac = new ClassPathXmlApplicationContext(new String[]{………..});
类路径下加指定的Xml文件,其中参数为字符串数组,说明可同时加载多个路径下的XML文件;
2、ApplicationCOntext ac = new FileSystemXmlApplicationContext(new String[]{……..});
文件路径下加载指定的Xml文件,其中参数为字符串数组,说明可同时加载多个路径下的XML文件
AppliactionContext被定义为接口,可视为制造对象的统一接口,XML文件加载后实例化的对象在内存中Key-Value的结构存储(Map),其中的Key为Xml文件中配置的对象ID(ID定义必须唯一);
|
<?xml version="1.0" encoding="UTF-8"?> <bean id="testID" class="cn.chenx.Test"/> </beans> |
|
public class TestSpring { |
.XML文件解析过程
加载指定路径下的 XML文件;
创建XML文件中配置的所有<bean />标签中指定类的对象,并加载进内存形成id与对象的键值对;
当<bean />标签下存在<property />标签时,接下该标签中的配置数据,并赋值给创建对象的对应属性字段;
如果<bean />标签之存在关系,设置对应的关系(这里的关系指对象之间引用);
.Bean的创建方式
1、无参构造创建对象(默认):
|
<bean id="UnitID" class="cn.chenx.spring.pojo.TestUnit"/> class的值表示需要实例化类的类路径去掉.java后缀; |
2、有参构造,通过辅助类静态方法创建对象:
|
<bean id="UnitID" class="cn.chenx.spring.pojo.HelpUnit" factory_method="createTestUnit"/> class的值表示TestUnit的辅助类HelpUnit,createTestUnit为辅助类的静态方法,并返回TestUnit对象; |
3、有参构造,通过辅助类非静态方法创建对象:
|
<bean id="HelpID" class="cn.chenx.spring.pojo.HelpFactory" /> <bean id="UnitID" factory_bean="HelpID" factory_method="createTestUnit"/> HelpID表示辅助类ID,UnitID表示需创建对象的ID,createTestUnit为辅助的成员方法(非静态); |
.Bean的生命周期
Bean的初始化和销毁的监听使用AbstractApplicationContext工厂类;
|
<bean id="UnitID" class="cn.chenx.spring.pojo.TestUnit" init-method指定的方法在Bean对象初始化时调用,destroy-method指定的方法在Bean对象销毁是调用; 相关函数调用: AbstractApplicationContext.close()立即销毁; AbstractApplicationContext.registerShutDownHook延迟销毁,Java虚拟机停止时调用; |
.Spring中的单例模式与原型模式
1、单例模式
| <bean id="UnitID" class="cn.chenx.spring.pojo.TestUnit" scope="singleton" /> |
2、原型模式(默认)
| <bean id="UnitID" class="cn.chenx.spring.pojo.TestUnit" scope="prototype" /> |
.Bean懒值实例化配置
| <bean id="UnitID" class="cn.chenx.spring.pojo.TestUnit" lazy-init="true" />
初始化将被推迟,直到首次对它取值才实例化 , 默认情况下lazy-init="false",表示springIOC容器启动时,<bean />标签将被实例化; |
.Bean继承关系配置
|
<bean id="parentID" class="cn.chenx.spring.pojo.ParentUnit"> <bean id="sonID" class="cn.chenx.spring.pojo.TestUnit" parent="parentID"> 父子关系通过 parent="parentID" 字段配置指定; |
.Bean属性配置
1、构造器方式
| Unit.java public class Unit { public Unit(){ } public Unit(String name,String value){ } spring.xml <bean id="unitID" class="pojo.Unit"> 注:Unit的两个构造函数都必须存在,XML文件中 index的值,对应的是Unit类中有参构造函数中参数前后顺序类似数组的下标访问,如:name的下标为0,value下标为1; |
2、set方式注入
Unit.java
|
public class Bean { //对应字段的get和set方法 } public class Unit { // 对应各个字段的get和set方法 } |
spring.xml
|
<?xml version="1.0" encoding="UTF-8"?> <!-- Bean类中基本数据类型或包装数据类型字段name与info的设置 --> <bean id="udateId" class="java.util.Date" ></bean> <bean id="unitId" class="ioc.Unit" > <!-- Unit类中引用数据类型字段uDate值的设置 --> <!-- Unit类中Set集合数据类型字段uSet值的设置,且集合成员数据类型为基本数据类型 --> <!-- Unit类中List集合数据类型字段uList值的设置,且集合成员数据类型为基本数据类型 --> <!-- Unit类中Map集合数据类型字段uMap值的设置,且集合成员数据类型为基本数据类型 --> <!-- Unit类中Set集合数据类型字段beanSet值的设置,且集合成员数据类型为引用数据类型 --> <!-- Unit类中List集合数据类型字段beanList值的设置,且集合成员数据类型为引用数据类型 --> <!-- Unit类中Map集合数据类型字段beanMap值的设置,且集合成员数据类型为引用数据类型 --> </beans> |
Core层开发所需Jar包(Spring3.2):
asm-3.2.0.RELEASE.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
spring-test-3.2.0.RELEASE.jar
Spring笔记(二)Core层的更多相关文章
- spring笔记(二)
共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下: 用户库jar包,需要手动发布到 ...
- spring笔记二
DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中.依赖注入的目的并非为软件系统带来更多功能,而是 ...
- spring cloud+dotnet core搭建微服务架构:服务发现(二)
前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这 ...
- spring cloud+.net core搭建微服务架构:服务发现(二)
前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这 ...
- Spring笔记01_下载_概述_监听器
目录 Spring笔记01 1.Spring介绍 1.1 Spring概述 1.2 Spring好处 1.3 Spring结构体系 1.4 在项目中的架构 1.5 程序的耦合和解耦 2. Spring ...
- Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven)
Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven) 本篇和 Spring 没有什么关系,只是学习 Spring,必备一些知识,所以放在这里了. 本篇内容: (1)M ...
- Spring笔记(6) - Spring的BeanFactoryPostProcessor探究
一.背景 在说BeanFactoryPostProcessor之前,先来说下BeanPostProcessor,在前文Spring笔记(2) - 生命周期/属性赋值/自动装配及部分源码解析中讲解了Be ...
- jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}
笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...
- Git 笔记二-Git安装与初始配置
git 笔记二-Git安装与初始配置 Git的安装 由于我日常生活和工作基本上都是在Windows上,因此此处只说windows上的安装.Windows上的安装和其他程序一样,只需要到http://g ...
随机推荐
- poj 2342 Anniversary party 树形DP入门
题目链接:http://poj.org/problem?id=2342 题意:一家公司有1 <= N <= 6 000个职工,现要组织一些职工参加晚会,要求每个职工和其顶头上司不能同时参加 ...
- maven 添加Sqlserver的jdbc jar包
maven添加sqlserver的jdbc驱动包 jdbc.jar download url->http://pan.baidu.com/s/1hrEhdti 通过maven命令将jar包安装到 ...
- 换一换js
(function(){ var tit = $("#changes"), con = $("#wday>ul"), page = con.length, ...
- 1007: [HNOI2008]水平可见直线
先对a排序,a相等的话就对b排序: 维护一个栈,每次取栈的头两个,和当前的直线相比较: 如果当前的直线把头第一个屏蔽,就将他出栈,一直到不能屏蔽为止: 代码: #include<cstdio&g ...
- Linux 系统挂载数据盘
适用系统:Linux(Redhat , CentOS,Debian,Ubuntu) * Linux的云服务器数据盘未做分区和格式化,可以根据以下步骤进行分区以及格式化操作. 下面的操作将会把数据盘划 ...
- HDU4525+公式
一开始TLE了... /* 模拟 */ #include<stdio.h> #include<math.h> ; typedef __int64 int64; int64 a[ ...
- loadrunner 怎么能得到返回的http状态?
loadrunner如何保存从服务器传回来的http头的信息? Action() { int HttpRetCode; web_url("www.hao123.com", &quo ...
- easyui源码翻译1.32--Menu(菜单)
前言 使用$.fn.menu.defaults重写默认值对象.下载该插件翻译源码 菜单组件通常用于快捷菜单.他是构建其他菜单组件的必备基础组件.比如:menubutton和splitbutton.它还 ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-007-给BEAN运行时注入值placeholder、@Value
一.用placeholder给bean运行时注入值的步骤 Spring取得placeholder的值是用${...} 1.声明placeholder bean (1)java方式 In order t ...
- 忘记commit的一次教训
由于业务需求,已经上线的系统新增加了一些需求,其中一个需求是,从一个SQLSERVER数据库导入数据到生产的ORCLE数据库, 由于我的失误导致系统上线后 生产的Oracle数据没有导入成功,但是在本 ...