介绍
是一个贯穿整个项目的管理对象的容器
一站式框架
1.正是因为spring框架性质是属于容器的性质,容器中装什么对象就有什么功能所以
是一站式框架。2.不仅不排斥其它框架,还能帮其它框架管理对象
3.aop支持
4.ioc思想 控制反转(Inversion of Control)
把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。 包括 依赖注入(Dependency Injection,简称DI) 和 依赖查找(Dependency Lookup)。 IoC可以认为是一种全新的【设计模式】,但是理论和时间成熟相对较晚, 并没有包含在GoF中(java的23种设计模式)。
5.spring jdbc
6.aop事物
7.junit测试支持
搭建
1.导包
最基础的4个核心包 beans context core expression spring 使用的是Apache的日志包 com.springsource.org.apache.commons.logging-1.1.1.jar 老版本中,还需要: com.springsource.org.apache.log4j-1.2.15.jar
2.创建类
3.创建xml配置文件 注册对象到容器
3.1文件位置任意 (建议src目录下) 3.2文件名任意建议applicationContext.xml 3.3约束引入 preferences=》xml=》xml catalog =》 add =》File System =》 spring=》 schema =》 beans =》 .xsd key type: Schema location key:加 / + .xsdDesign 右键Edit =》 add =》 xsi =》将自己添加的.xsd引入
4.注册对象到容器
5.测试
@Test public void test(){ //1)获取容器 ConfigurableApplicationContext cac = new ClassPathXmlApplicationContext("applicationContext"); //2)向容器“要”对象 User user = (User)cac.getBean("user"); //3)使用获取过来的对象 System.out.println(user); //4)释放资源 关闭容器 cac.close(); }
概念
1.思想 IOC
di 依赖注入 注入方式: 构造方法 ,set方法注入,字段注入(不推荐) 注入类型: 基本类型 引用类型
2.BeanFactory & ApplicationContext
BeanFactory spring的原始接口,针对原始接口实现类实现的功能较为单一 特点:每次获取对象的时候才创建对象(原因:当时的系统资源较小) ApplicationContext 特点:每次容器启动时就会创建容器中配置的所有对象 提供了更多的功能
spring配置详解
1.bean 标签属性配置
id: 过去的方式 不可以重名,不可以有特殊符号name:可以重名,可以有特殊符号,不推荐重名,没意义class:包名.类名
2.三种对象创建方式
无参构造方法
静态工厂 手动创建,交给spring容器管理package org.spring.domain; public class UserFactory { public static User createUser(){ System.out.println("静态工厂创建对象"); return new User(); } }
实例工厂
类似静态工厂 (只是将public去掉然后在applicationContext.xml中配置:)3.scope属性
singleton(默认值):单例对象,被标识为单例的对象在spring容器中只会存在一个实例prototyp:多例原型,被标识为多例的对象,每次在获得才会创建对象,每次创建的都是新对象request:web环境下,与request的生命周期一致session:web环境下,与session的生命周期一致
4.生命周期方法
init-method:出生方法,构造方法后调用destory-method:销毁方法,容器关闭前调用
5.spring的模块化配置
所有的对象配置在一个配置文件中太多了,模块化配置:在主配置文件中引入其他spring的配置文件:
6.srping属性注入
set方法注入 值类型属性:对象属性: ref="" 其他bean的name 构造函数注入 name属性:构造函数的参数名 index属性:构造函数的参数索引 type属性:构造函数的参数类型 p名称空间注入 1.导入p名称空间 xmlns:p="http://www.springframework.org/schema/p" 2.使用p:属性完成注入 |-值类型:p:属性名="值" |-对象类型:p:属性名-ref="bean名称" 说明:p名称空间注入,走的还是set方法 spel注入 spring expression language spel表达式 模仿el ognl表达式 如引用其他对象的值: 但是引用类型不可以使用spel表达式
7.复杂类型注入
array:list: 123 456 map: set: properties: 123 456 com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/mybatis root 123456