一、Spring介绍
1.1、Spring在三层架构中的位置
1.2、Spring一站式框架
★ 因为Spring框架性质是属于容器性质的;
★ 容器中装有什么对象就有什么功能;
★ 不仅不排斥其他框架、还能帮其他框架管理对象
★ AOP(面向切面编程)支持;
★ IoC(控制反转)思想;
★ Spring JDBC;
★ AOP事务。
1.3、Spring中的IoC和DI思想
★ IoC 即 Inverse of Control (反转控制)
将我们创建对象的方式反转了。
以前对象的创建是由开发人员自己维护,包括依赖关系也是自己注入。使用Spring之后,对象的创建以及依赖关系可以由Spring完成创建以及注入。反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序(Spring)!
★ DI 即 Dependency Injection(依赖注入) ——下一篇会详细讲解
实现IoC思想需要DI做支持。
注入方式():set方法注入(重点)、构造方法注入、p名称空间注入(了解即可)、spel注入(了解即可)
注入类型:值类型注入(八大基本数据类型)、引用类型注入(将依赖对象注入)
1.4、BeanFactory(已过时) 和 ApplicationContext
★BeanFactory是Spring最原始的接口,针对原始接口的实现类功能较为单一,BeanFactory接口实现类的容器特点是每次在获得对象时才会创建对象。
★ApplicationContext是后来Spring的接口,提供了更多的功能,每次容器启动时就会创建容器中配置的所有对象。它有两个典型的实现类:①从类路径下加载配置文件:ClassPathXmlApplicationContext ②从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext。
结论:Web开发中,使用ApplicationContext,在资源匮乏的环境可以使用BeanFactory。
二、搭建Spring开发环境
- Spring官网:http://spring.io
- 下载地址(打开后版本任选):http://http://repo.springsource.org/libs-release-local/org/springframework/spring/
- 解压后主要目录结构:docs:API和开发规范 libs:开发源码和jar包 schema:约束
2.1、导包
下图中红框中Core Container(核心容器)是我们使用Spring最核心的几个包!
分别对应如下四个包:
Spring本身也是支持日志的,其日志系统使用的是目前市场上很成熟的Apache开发的日志包。
下面这个包可选
导入到lib下:
:
2.2、创建一个对象
package com.zl.bean;
public class User {
private String name;
private Integer age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2.3、书写配置文件,注册对象到容器
位置任意,建议在src下;配置文件名字任意,建议为 applicationContext.xml
导入约束
打开preference -》 (搜cata就会出现XML)点击XML Catalog -》 点击旁边的Add -》 点击File System
按照下面的路径找到beans相应的xsd文件(XML约束),选择一个,这里我选的最后一个。
Key type改为Schema location,在Key后面追加,如下图:
点击OK之后看到Preference对话框如下:
继续OK后,在创建的applicationContext.xml里添加<beans></beans>,再点击下面的Design,看下图
判断导入约束成功与否,切换到source,按Alt+/,有如下提示,说明成功了
添加如下代码:
2.4、测试
①创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml");
②向容器“要”user对象
User u = (User)ac.getBean("user");
三、Spring配置详解
使用import元素可以导入其他Spring配置文件(路径依然是相对于src)
3.1、bean元素
bean元素:使用该元素描述需要Spring容器管理的对象
★ name属性:给被管理的对象起个名字,获得对象时根据该名称获得对象。名称可以重复,可以使用特殊字符。
★ class属性:被管理对象的完整类名。
★ id属性:和name属性功能相同。但是名称不可重复,不能使用特殊字符(/ *等都不行)。尽量使用name属性。
★ scope属性:
取值①singleton(默认值,):单例对象,被标识为单例的对象在Spring容器中只会存在一个实例。
②prototype:多例原型,被标识为多例的对象,每次在获得时才会创建,每次创建都是新的对象。整合Struts2时,必须配置为多例,多个请求需要Spring创建不同的Action对象处理。
③request(基本不会用):Web环境下,对象与request生命周期一致。
④session(基本不会用):Web环境下,对象与session生命周期一致。
★ 声明周期属性:
init-method: 配置一个方法作为生命周期初始化方法,Spring会在对象创建之后立即调用。
destroy-method:配置一个方法作为生命周期销毁方法,Spring容器在关闭并销毁所有容器中的对象之前调用。
init、destroy方法写在User.java里面
3.2、Spring创建对象的方式
★空参构造方式
在实体类User中为其添加构造方法:
★静态工厂
自定义一个创建User对象的方法:
package com.zl.factory;
import com.zl.bean.User;
public class UserFactory {
public static User createUser() {
System.out.println("静态工厂创建User");
return new User();
}
}
applicationContext.xml里面:
测试:
打印结果:
★动态实例化工厂
自定义一个创建User对象的方法,对比静态工厂:
applicationContext.xml
测试: