spring的原理

来源:互联网 发布:java lambda 参数 编辑:程序博客网 时间:2024/06/16 17:15
spring这个经典框架相信大家已非常熟悉,这是自己整理的一些关于spring的笔记和大家分享一下
一.spring的概述
1.对象依赖问题
a、创建对象的时候,new一个对象
b、spring的工厂来创建和管理对象,这个工厂的主要目标就是生产对象。工厂怎么配置就产生什么样的对象。
工厂里面根据反射生成相应的对象
获取工厂, 然后向工厂获得相应的对象, 调用从工厂中后获得的对象的相关方法

所以工厂中要配置很多的相应信息,工厂的配置很麻烦.(单例和多例)

编写xml文件,解析xml文件,通过反射将bean节点中的值读取出来,放到属性中去,生成相应的对象
c、自定义spring 不光是spring其他的框架也是 配置文件加反射

d。路德·约翰森 spring之父 包容,包装,整合其他的技术和框架,编程也一种艺术
Expert one-to-one Designer and Development,挑战传统的EJB

e。学习spring主要学习的是IOC、AOP、DI、声明式事务

f。轮子理论,现有的技术,如果已经很成功了,那么我们直接包容他,拿过来用就行了。
如果轮胎坏了,直接买一个新的就行了,没必要直接去制造轮胎

2.现有技术的整合问题
3.同时彻底解决了事务方面的问题

4.spring的思想是一种包容的思想,什么东西好,就把什么东西包容进来.
二.spring开发的jar包
a。spring的 beans jar包
b。core 核心
c。context 语境,上下文,环境,背景
d。expression 表示,表现,表达
e。commons-logging 用来记录程序运行时的活动的日志记录。
三.spring的快速入门
1.导入jar包
2.写spring的配置文件 xml文件 applicationContext.xml
3.spring的 schema约束
4. 读取配置文件,反射,得到对象,给对象赋值 (spring做的事情)
5.程序员做的事情 获取工厂,向工厂申请一些对象,在调用从工厂获取的相关对象的方法
6.
a.加载配置文件的到一个对象
ApplicationContext ac = new ClassPathApplicationContext("applicationContext.xml");
b.从工厂中获取对象
Customer c = (Customer)ac.getBean("customer");
c.使用从工厂中获取的对象(调用方法,调用属性)
四.spring的工作原理
1.创建配置文件,
2.编写配置文件(加入一些对象的配置的信息)
3.spring本身就是一个工厂(
五.创建对象的三种方式
1.调用空参的构造方法
2.调用静态公厂
3.调用实例工厂 先产生历实例工厂的对象, InstanceFactory
tomcat启动的时候,配置文件中的所有对象,spring让所有的对象都创建了,用的时候直接取出已经创建的对象就行了.
对象的创建是在配置文件加载时,就会生成配置的对象.在spring容器加载时,内部所配置的bean对象都会进行实例化.
六.对象注值的常用方式
spring默认的是单例的
ApplicationContext 通过getBean()方法,获得xml文件里面配置的对象
1.通过setter方法注值,
2.使用构造方法,实现属性的注值(一定要有有参的构造方法)
3.p名称空间注值 ,在约束中加入p名称标签, <bean id class p:属性和值 p:属性和值> 内部的本质是:调用了setter方法

注入对象:property 中注入一个对象,使用ref 将这个对象的id放入就行了 构造器注值,
p名称空间注值需要在属性后面加-ref.
七.对象的生命周期
1.当spring配置文件加载时,就会完成配置文件中的对象的实例化
2. 实例化,初始化,销毁
创建的时候,实例化了,创建一个该对象的实例
在bean中增加 init-method destroy-method
ClassPathXmlApplicationContext 对象能被关闭
八.对象的作用域
1.作用域:指对象的作用范围
2.单例:
spring默认是单例的 scope="singleton" ,在spring IOC容器中仅存在一个bean实例,即bean以单例的方式存在
多实例scope="prototype",每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行new XxxBean()
判断单实例还是多实例, 打印对象的地址值或者使用==
Struts2的action必须配置成多实例的,如果不配置成多实例就会出现线程安全问题 scope="prototype"
九.spring与web项目集成
1.用于加载spring配置文件的一个监听器 listener
2.指明spring配置文件的所在的位置
3.
十.spring与struts2项目的集成
十一.spring的注解式开发

spring回顾
1.主要解决了对象依赖相关问题,整合现有流行技术,还可以解决事务问题.
2.IOC 控制反转
就是将早期直接new对象的控制权交给spring容器,交给工工厂来完成。相当于工厂得到了对象的控制权,而程序代码,不在创建对象,而是直接获取对象。
3.DI是什么?
依赖注入,将对象之间的关系交给spring来维护
4.体系结构
核心容器:beans,core,context,expression,commons-logging
5.快速入门
1.导入jar包
2.编写applicationContext.xml
3.配置一些bean节点
4.测试 ApplicationContext容器 ,它是一个接口,它的实现类ClassPathXmlApplicationContext
6.执行原理
xml解析+反射+工厂模式
7.对象创建的三种方式
1.构造器无参
2.静态工厂
3.实例工厂
8.注值
1.setter方法注值 注对象一个已经定义好的对象 ref 注入普通的值 value
2.有参的构造方法
3.p名称标签
4.spEL注值 语法#{}
9.对象的生命周期
在spring配置文件加载时,就会实现对象的实例化 然后执行init 在容器关闭的时候就会执行destory方法
10.对象的作用域
scope属性
单例
多例:在与Struts2集成时,action必须配置成多实例
11.spring与web项目的集成
spring-web-xxx 的jar包
配置 web.xml文件,让spring的配置文件只加载一次
<listener>
<listener-class>包名.ContextLoaderListener<listener-class> 他默认加载的是/WEB-INF/ApplicationContent.xml文件

1 0