1.spring的简介
解决业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
spring一站式框架:spring框架的性质是属于容器性质的、容器中装什么对象就具有什么功能(所以可以一站式)、不排除其他框架(并且帮助其他开管理对象)、aop支持(切面编程)、ioc思想(控制反转)、spring jdbc、aop事务、junit测试支持
2.spring框架的搭建
1>导包
2>创建一个对象
private String name;
private Integer age;
set/get方法
3>书写applicationContext.xml配置文件
要求:位置(src下),名字(任意名字,但是建议使用applicationContext.xml),导入约束
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="user" class="com.imwj.domain.User"></bean>
</beans>
4>测试
@Test
public void test1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");//1 创建容器对象
User user = (User) ac.getBean("user");//2 向容器得到user对象
System.out.println(user);//3 测试user对象
}
3.spring的概念与思想
1>思想
ioc:控制反转
我们将创建对象的方式反转了,以前是由开发人员自己new对象,包括依赖关系也是自己注入;使用spring之后对象的创建就由spring完成创建以及注入,反转控制就是反转了对象的创建方式(从我们自己创建反转给了程序spirng)
DI:依赖注入
实现ioc思想需要di做支持,注入方式(set方式注入、构造方法注入、字段注入),注入类型(值注入类型:八大基本数据类型,应用类型注入:将依赖对象注入ref)
2>BeanFactory和ApplicationContext
BeanFactory接口:spring的原始接口,功能单一(接口实现类的容器会在每次获得对象是才会创建对象)
ApplicationContext:每次容器启动时就会创建容器中配置的所有对象,并提供更多功能
从类的路径下加载配置文件:ClassPathXmlApplicationContext("配置文件名")
从硬盘绝对路径加载配置文件:FileSystemXmlApplicationContext("d:/xxx/yyy/xxx")
BeanFactory已极少使用,大多数使用的时ApplicationContext的从类的路径下加载配置文件
4.spring配置详解
1>Bean元素:
<!-- Bean元素:使用该元素描述需要spring容器管理的对象
class属性:被管理对象的完整类名.
name属性:给被管理的对象起个名字.获得对象时根据该名称获得对象.
可以重复.可以使用特殊字符.
id属性: 与name属性一模一样. (已极少使用)
名称不可重复.不能使用特殊字符.
结论: 尽量使用name属性.
-->
<bean name="user" class="com.imwj.domain.User"></bean>
2>Bean元素进阶:Scope和生命周期属性
Scope属性:
singleton(默认值):单例对象.被标识为单例的对象在spring容器中只会存在一个实例
prototype:多例原型.被标识为多例的对象,每次再获得才会创建.每次创建都是新的对象.整合struts2时,ActionBean必须配置为多例的.
request:web环境下.对象与request生命周期一致.
session:web环境下,对象与session生命周期一致.
<bean name="user" class="com.imwj.domain.User" scope="prototype"></bean><!-- 最常用的还是singleton默认值-->
生命周期属性:
init-method:配置一个方法作为生命周期初始化方法.spring会在对象创建之后立即调用.
destory-method:配置一个方法作为生命周期的销毁方法.spring容器在关闭并销毁所有容器中的对象之前调用.
<bean name="user" class="com.imwj.domain.User" init-method="init" destroy-method="destroy"></bean><!-- init和destory都是User类中的方法 -->
3>spring对象创建对象的方式:(空参构造方式、静态工厂、实例工厂)后两种作了解
空参构造方式
<bean name="user" class="com.imwj.domain.User"></bean>
4>spring的分模块配置(引入其他applicationContext.xml)
<!-- 导入其他spring配置文件 -->
<import resource="com/imwj/test/applicationContext.xml"/>
5.spring属性注入
1>注入方式:set方法注入、构造函数注入、p名称空间注入、spel注入(后两种作了解)
set方式注入(通过set/get方法)<property
<!-- set方式注入 -->
<bean name="user" class="com.imwj.domain.User">
<!-- 值类型注入:为user对象中的属性注入 -->
<property name="name" value="tom"></property>
<property name="age" value="18"></property>
<!-- 引用类型注入:为user引用的其他对象car注入 -->
<property name="car" ref="car"></property>
</bean>
<bean name="car" class="com.imwj.domain.Car"></bean>
构造函数注入(有参构造)<constructor-arg
<!-- 构造函数注入 -->
<bean name="user" class="com.imwj.domain.User">
<!-- name属性:构造参数的参数名 -->
<!-- index属性:构造参数的参数所有(0开始)-->
<!-- type属性:构造参数的类型 -->
<constructor-arg name="age" index="0" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="car" ref="car" index="1"></constructor-arg>
</bean>
2>复杂类型注入:数组、List、Map、Properties
数组
<!-- 数组注入:如果数组中只准备注入一个只值(对象),直接value|ref即可 -->
<bean name="user" class="com.imwj.domain.User">
<property name="arry">
<array>
<value>tom</value>
<value>jeery</value>
<ref bean="car"/>
</array>
</property>
</bean>
List
<!-- List注入:如果list只准备注入一个只值(对象),直接value|ref即可 -->
<bean name="user" class="com.imwj.domain.User">
<property name="list">
<list>
<value>tom</value>
<value>jeery</value>
<ref bean="car"/>
</list>
</property>
</bean>
Map
<!-- Map注入:如果map只准备注入一个只值(对象),直接value|ref即可 -->
<bean name="user" class="com.imwj.domain.User">
<property name="map">
<map>
<entry key="name" value="tom"></entry>
<entry key="class" value-ref="car"></entry>
<entry key-ref="user" value-ref="car"></entry>
</map>
</property>
</bean>
Properties
<!-- Properties注入 -->
<bean name="user" class="com.imwj.domain.User">
<property name="prpo">
<props>
<prop key="driverClass">com.jdbc.mysql.Driver</prop>
</props>
</property>
</bean>
一些必要的特殊配置(记!):ApplicationContext.xml应该只加载一次
<!-- 可以让spring容器随项目的启动而创建,随项目的关闭而销毁 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
总结:
1.spring介绍
spring并不局限于某一层.
spring是对象的容器,帮我们"管理"项目中的所有对象
2.spring搭建
1>导包 4+2
2>准备类
3>书写配置(src/applicationContext.xml)
4>书写代码测试
3.spring中的概念
ioc: 反转控制. 创建对象的方式反转了.从我们自己创建对象,反转给spring(程序)来创建.
di: 依赖注入.将必须的属性注入到对象当中.是实现ioc思想必须条件.
beanFactory与ApplicationContext
4.配置文件详解
bean元素
id: 给Bean起个名字 不能重复,不能使用特殊字符.早期属性.
name:给Bean起个名字 能重复,能使用特殊字符.后来属性.
class:类的完整类名
生命周期属性
init-method 指出初始化方法
destory-method 指出销毁方法
作用范围
scope:
singleton(默认值):单例.创建容器时会立即创建单例对象
prototype :多例.每次获得对象时,才会创建对象,并且每次都会创建新的对象
分模块开发
<import />
5.Bean的创建方式
*空参构造创建
静态工厂
实例工厂
6.注入方式
*set方法
*构造方法
p名称空间
spEL表达式
7.复杂属性注入
Array
List
Map
Properties
8.在WEB环境中使用Spring容器
1>导包 4+2+1(spring-web)
2>在web.xml中配置listener => ContextLoaderListener
|-配置参数,指定spring配置路径
3>在Action中,使用工具类获得容器.
|-WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)